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身份验证

Download history 449/week @ 2024-03-14 453/week @ 2024-03-21 457/week @ 2024-03-28 416/week @ 2024-04-04 637/week @ 2024-04-11 260/week @ 2024-04-18 379/week @ 2024-04-25 298/week @ 2024-05-02 680/week @ 2024-05-09 719/week @ 2024-05-16 614/week @ 2024-05-23 624/week @ 2024-05-30 408/week @ 2024-06-06 891/week @ 2024-06-13 686/week @ 2024-06-20 435/week @ 2024-06-27

2,544 每月下载
用于 4 crate

MIT/Apache

245KB
5.5K SLoC

Aliri

“访问”的 Esperanto

CI

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

支持的检查

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

未来计划

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

替代方案

这一系列 crates 是基于我之前对 jsonwebtoken 的使用,并扩展以适应实现完整的 JOSE 套件的更宏伟目标。进一步受到 jsonwebtokens 的启发,特别是 Verifier 类型。

不安全代码

Aliri 确实使用了非常有限的不安全代码。此不安全代码仅限于在宏中定义的一个函数,用于为 StringVec<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