18个版本 (9个破坏性版本)
0.10.1 | 2024年4月12日 |
---|---|
0.10.0 | 2023年5月27日 |
0.9.0 | 2022年11月28日 |
0.8.0 | 2022年6月15日 |
0.2.0 | 2020年6月25日 |
#383 在 身份验证
2,544 每月下载
用于 4 crate
245KB
5.5K SLoC
Aliri
“访问”的 Esperanto
Aliri 是一系列 crate,旨在帮助构建访问控制,特别是针对以令牌为主要访问手段的 Web API。
特性
aliri
crate 提供了对 JavaScript/JSON Object Signing and Encryption (JOSE) 标准的主要支持。有关此标准的RFC相关信息,请参阅crate的文档。
aliri_oauth2
crate 提供了一些支持,以确保令牌持有者具有足够的 作用域 以允许访问。它还提供了一些使用本地或远程 JSON Web Key Set (JWKS) 作为令牌认证权威的功能。其中一些功能可能作为计划中的 OpenID Connect (OIDC) 功能的一部分进行拆分。
aliri_actix
crate 提供了一些创建 actix-web
服务器作用域保护器的有用绑定。
同样,aliri_warp
crate 提供了对 warp
服务器的绑定,并包括用于验证端点访问的有用过滤器。
在 aliri
标题下的其他 crate 提供了对这些主要 crate 的支持功能。
JSON Web Signature (JWS) 操作
支持算法
特性 hmac
- HS256, HS384, HS512
特性 rsa
- RS256, RS384, RS512
- PS256, PS384, PS512
特性 ec
- ES256, ES384
注意:由于算法在不正确接受时会产生安全漏洞,none
明确不支持此库。
通过 private-keys
功能提供对私钥的支持,允许执行签名操作和生成新密钥。
由于无法以所需的 JWK 形式导入和导出生成的密钥,使用 openssl
提取或处理所需的参数。此外,ring
不支持缺少 p
、q
、dmp1
、dmq1
或 iqmp
值的 RSA 私钥。这些参数被 强烈建议,因为它们可以加快签名计算速度,但根据 JWA 规范,在技术上是可选的。
支持的检查
iss
精确字符串匹配aud
精确字符串匹配(列表)sub
正则表达式匹配jti
断言函数nbf
与当前时间对比exp
与当前时间对比iat
最大年龄检查alg
精确匹配(列表)
未来计划
- 支持 JWE
- 支持作为依赖方的 OpenID Connect
- 支持获取令牌和令牌管理
替代方案
这一系列 crates 是基于我之前对 jsonwebtoken
的使用,并扩展以适应实现完整的 JOSE 套件的更宏伟目标。进一步受到 jsonwebtokens
的启发,特别是 Verifier
类型。
不安全代码
Aliri 确实使用了非常有限的不安全代码。此不安全代码仅限于在宏中定义的一个函数,用于为 String
和 Vec<u8>
值生成强类型包装器。在这里使用不安全是必要的,以便于引用类型,将 &str
重新解释为 &MyTypeRef
或将 &[u8]
重新解释为 &Base64Ref
。这种重新解释是安全的,因为围绕 str
的包装器使用 #[repr(transparent)]
,这意味着包装器与底层切片具有完全相同的表示。
由于上述原因,一些包含的crate使用#![deny(unsafe_code)]
而不是#![forbid(unsafe_code)]
。代码库中唯一的#![allow(unsafe_code)]
可以在typed_string!
和b64_builder!
宏中找到。
我做出这个选择是因为我更喜欢强类型API而不是字符串类型API。我相信,使用这个库的用户将从这个选择中受益,因为它将帮助他们防止愚蠢的错误。
请注意,由于cargo-geiger
在宏内部解析不安全使用有困难,该工具不会将这些crate报告为“放射性”,但可能应该如此。请做好你的尽职调查。
依赖项
~14–29MB
~544K SLoC