11个版本 (破坏性)
| 0.9.0 | 2023年5月27日 |
|---|---|
| 0.8.0 | 2022年11月28日 |
| 0.7.0 | 2022年6月15日 |
| 0.6.1 | 2022年3月18日 |
| 0.2.0 | 2020年6月25日 |
在身份验证中排名第1054
每月下载42次
250KB
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报告为“放射性”,但可能应该如此。请做好尽职调查。
依赖项
~18–31MB
~584K SLoC