#web #aliri #test #json #timing #web-api #key-set

aliri_clock

aliri系列crate使用的定时实用工具

5个版本

0.1.4 2021年6月3日
0.1.3 2021年5月13日
0.1.2 2021年4月29日
0.1.1 2021年4月29日
0.1.0 2021年4月29日

排名 382测试

Download history 45630/week @ 2024-04-08 47888/week @ 2024-04-15 50464/week @ 2024-04-22 33915/week @ 2024-04-29 43721/week @ 2024-05-06 40279/week @ 2024-05-13 38764/week @ 2024-05-20 31695/week @ 2024-05-27 29353/week @ 2024-06-03 32323/week @ 2024-06-10 34481/week @ 2024-06-17 36442/week @ 2024-06-24 25833/week @ 2024-07-01 32693/week @ 2024-07-08 33727/week @ 2024-07-15 30190/week @ 2024-07-22

每月下载量 124,228
用于 8 个crate(直接使用7个)

MIT/Apache

9KB
227

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作为信赖方
  • 支持获取令牌和令牌管理

替代方案

这个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报告为“放射性”,但可能应该这样。 请务必尽职调查。

依赖项

~170KB