#json #key-set #web #aliri #access-control #authorization

aliri_traits

基于令牌的身份验证,具有验证访问权限的权限

2个版本

0.1.1 2021年5月13日
0.1.0 2021年4月29日

#784 in 身份验证

Download history 403/week @ 2024-03-17 491/week @ 2024-03-24 547/week @ 2024-03-31 491/week @ 2024-04-07 325/week @ 2024-04-14 357/week @ 2024-04-21 353/week @ 2024-04-28 608/week @ 2024-05-05 433/week @ 2024-05-12 707/week @ 2024-05-19 701/week @ 2024-05-26 597/week @ 2024-06-02 514/week @ 2024-06-09 884/week @ 2024-06-16 638/week @ 2024-06-23 339/week @ 2024-06-30

2,386 每月下载量
5 库中使用(直接使用 4 个)

MIT/Apache

5KB
73

Aliri

Esperanto中的“访问”

CI

Aliri 是一系列库,旨在帮助构建访问控制,尤其是Web API的访问控制,其中令牌是提供访问的主要手段。

特性

aliri 库为主提供了对 JavaScript/JSON Object Signing and Encryption (JOSE) 标准的主要支持。有关此标准的RFC相关信息,请参阅库文档

aliri_oauth2 库为确保令牌持有者具有足够的 作用域 以允许访问提供了某些支持。它还提供了一些使用本地或远程 JSON Web Key Set (JWKS) 作为验证令牌的权限的功能。其中一些功能可能作为计划中的 OpenID Connect (OIDC) 功能的一部分分离。

aliri_actix 库为创建 actix-web 服务器的作用域保护器提供了有用的绑定。

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

aliri 标题下的其他库为这些主要库提供支持功能。

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

无运行时依赖