10次发布
0.3.1 | 2024年4月12日 |
---|---|
0.2.3 | 2023年5月27日 |
0.2.2 | 2022年11月28日 |
0.2.1 | 2022年8月10日 |
0.1.0 | 2021年6月3日 |
#495 in 认证
124,459 monthly downloads
用于 aliri_reqwest
250KB
5.5K SLoC
Aliri
“访问”的 Esperanto
Aliri 是一系列crate,旨在帮助构建访问控制,特别是Web API的访问控制,其中令牌是提供访问的主要手段。
特性
aliri
crate提供了对JavaScript/JSON对象签名和加密(JOSE)标准的初级支持。有关此标准的RFC的更多信息,请参阅crate的文档。
aliri_oauth2
crate提供了一些支持,以确保令牌持有者具有足够的作用域以允许访问。它还提供了一些使用本地或远程JSON Web密钥集(JWKS)作为认证令牌的权威的功能。其中一些功能可能会作为计划中的OpenID Connect(OIDC)功能的一部分分离出来。
aliri_actix
crate提供了一些用于创建actix-web
网络服务器的范围保护器的有用绑定。
类似地,aliri_warp
crate提供对warp
网络服务器的绑定,并包括用于验证端点访问的有用过滤器。
在aliri
标题下,其他crate提供对这些主要crate的支持功能。
JSON Web签名(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报告为“放射性”,但实际上应该如此。请务必做好尽职调查。
依赖项
~11–24MB
~425K SLoC