#oauth2 #reqwest #jwt #web-api #api-token #api-access

aliri_reqwest

基于最佳实践的reqwest背景令牌管理和续订

7个版本 (4个重大更新)

0.5.0 2024年4月12日
0.4.1 2023年3月5日
0.4.0 2022年11月28日
0.3.0 2022年6月15日
0.1.1 2022年3月19日

#216身份验证

Download history 47702/week @ 2024-04-16 48927/week @ 2024-04-23 35259/week @ 2024-04-30 42764/week @ 2024-05-07 40158/week @ 2024-05-14 33722/week @ 2024-05-21 33327/week @ 2024-05-28 26947/week @ 2024-06-04 33641/week @ 2024-06-11 33431/week @ 2024-06-18 36521/week @ 2024-06-25 23519/week @ 2024-07-02 32866/week @ 2024-07-09 32383/week @ 2024-07-16 29270/week @ 2024-07-23 25321/week @ 2024-07-30

124,401 每月下载量

MIT/Apache

90KB
1.5K SLoC

Aliri

“访问”的 Esperanto

CI

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

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

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

支持的检查

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

未来计划

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

替代方案

这个crate集是由我对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–27MB
~503K SLoC