11 个版本 (7 个破坏性版本)
| 0.9.1 | 2024年4月12日 |
|---|---|
| 0.9.0 | 2023年5月27日 |
| 0.8.0 | 2022年11月28日 |
| 0.7.0 | 2022年6月15日 |
| 0.2.0 | 2020年10月23日 |
#344 in HTTP 服务器
315KB
6K 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
- 支持获取令牌和令牌管理
替代方案
这一组 crate 是基于我对 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报告为“放射性”,但可能应该这样做。请做好你的尽职调查。
依赖项
~23–40MB
~751K SLoC