6个版本 (3个重大更新)

0.4.0 2024年4月12日
0.3.0 2023年5月27日
0.2.1 2023年3月2日
0.2.0 2022年11月28日
0.1.1 2022年6月15日

#923认证

Download history 244/week @ 2024-04-26 209/week @ 2024-05-03 392/week @ 2024-05-10 446/week @ 2024-05-17 393/week @ 2024-05-24 377/week @ 2024-05-31 273/week @ 2024-06-07 616/week @ 2024-06-14 333/week @ 2024-06-21 344/week @ 2024-06-28 452/week @ 2024-07-05 192/week @ 2024-07-12 200/week @ 2024-07-19 292/week @ 2024-07-26 317/week @ 2024-08-02 753/week @ 2024-08-09

每月 1,590 次下载

MIT/Apache

300KB
6K SLoC

Aliri

Esperanto语中“访问”的意思

CI

Aliri 是一系列用于帮助构建访问控制(特别是Web API的访问控制)的crate,其中令牌是提供访问的主要方式。

功能

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 web服务器的范围保护器的有用绑定。

类似地,aliri_warp crate提供了对warp web服务器的绑定,并包括用于端点认证的有用过滤器。

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 不支持缺少 pqdmp1dmq1iqmp 值的 RSA 私钥。这些参数强烈推荐,因为它们可以加快签名计算速度,但根据 JWA 规范,在技术上它们是可选的。

支持的检查

  • iss 完全字符串匹配
  • aud 完全字符串匹配(列表)
  • sub 正则表达式匹配
  • jti 断言函数
  • nbf 与当前时间比较
  • exp 与当前时间比较
  • iat 最大年龄检查
  • alg 完全匹配(列表)

未来计划

  • 支持 JWE
  • 支持作为依赖方的 OpenID Connect
  • 支持获取令牌和令牌管理

替代方案

这个 crate 集合是从我之前对 jsonwebtoken 的使用中发展而来的,并扩展以适应实现完整的 JOSE 套件的大目标。进一步的灵感来自于 jsonwebtokens,特别是 Verifier 类型。

不安全代码

Aliri 确实使用非常有限的不安全代码。这种不安全代码仅限于在宏中定义的单个函数,用于为 StringVec<u8> 值生成强类型包装器。在这里使用不安全是必要的,以便将引用类型重新解释为 &str&[u8] 作为 &MyTypeRef&Base64Ref。这种重新解释是安全的,因为围绕 str 的包装器使用 #[repr(transparent)],这意味着包装器与底层切片具有完全相同的表示。

由于上述原因,一些包含的 crate 使用 #![deny(unsafe_code)] 而不是 #![forbid(unsafe_code)]。代码库中唯一的 #![allow(unsafe_code)] 可以在 typed_string!b64_builder! 宏中找到。

我做出了这个选择,因为我更喜欢强类型API而不是字符串类型API。我相信,这个库的用户将从这个选择中受益,因为它将帮助他们防止愚蠢的错误。

请注意,由于cargo-geiger在宏内部解析不安全使用存在困难,该工具不会将这些crates报告为“放射性”,但可能应该。 请做好尽职调查。

依赖项

~11–20MB
~365K SLoC