#public-key #azure #validation #token #jwt #async

azure_jwt_async

适用于Microsoft Azure令牌的简单JWT验证器,支持异步操作

3个版本

0.3.2 2023年12月21日
0.3.1 2023年12月21日
0.3.0 2023年12月21日

#430 in 认证

MIT 许可证

43KB
368

一个用于异步验证Azure JWT令牌的库。是azure-jwt的更新分支

Crates.io Chrono on docs.rs

此库将从Microsoft获取公钥并使用这些密钥来验证您提供的令牌的真实性。它默认为您验证和映射Azure Id令牌。

Azure的公钥通过通过open-connect api发送请求来获取。默认情况下,存储的密钥在24小时后过期,并获取新的密钥,因为这些密钥与正常的密钥轮换方案相对应。还有一个默认的重试回退机制,如果密钥(kid)与当前的任何公钥不匹配,将触发一次密钥刷新(限制为每小时一次),以防默认设置与公钥轮换不匹配或Microsoft出于某些原因立即轮换密钥。这两个设置都可以配置。

示例


let client_id = "my client id from Azure";
let mut az_auth = AzureAuth::new(client_id).await.unwrap();

let decoded = az_auth.validate_token(TEST_TOKEN).await?;

性能

在默认配置中创建新的AzureAuth实例时,它将触发对Microsoft端点的两次调用(一次获取open connect元数据以获取当前的jwks_uri,一次获取jwk集)。您应该谨慎创建这些对象,并优先使用单个实例的引用。如果您在Web服务器上使用它,应避免在每次连接时创建新的实例,而是在服务器启动时实例化一个实例,并使用互斥锁或通道进行验证。密钥加载后,操作应该非常快。

安全

此库验证以下六个方面

  1. 令牌是由Azure签发且未被篡改的
  2. 此令牌是为您的应用程序签发的
  3. 令牌尚未过期
  4. 令牌在其有效之前未被使用
  5. 令牌不是在未来签发的
  6. 令牌头部指定的算法是正确的算法*
  • 请注意,我们不会使用令牌头部来为我们设置算法,请参阅这篇文章了解更多关于为什么这样做是错误的信息

验证在失败时将返回Error,为库用户提供更多粒度以了解为什么令牌被拒绝。

您需要

您需要一个由 Azure 为您的应用程序创建的 私有 client_id,以便能够验证令牌是为您的应用程序创建的(而不是任何拥有有效 Azure 令牌的人都可以登录)。这是库从您那里获取的 ID,以验证令牌是否为您的应用程序签发的。

您将获得一个已验证的、为您解析的令牌。

您仍然需要负责

  1. 验证用户是否有权访问您的系统
  2. 验证任何对您的用例重要的其他信息
  3. 如果您请求有关用户的信息超过了在 Microsoft ID tokens reference 中定义的信息,您需要创建一个映射到令牌中所有字段的 Struct,并使用 custom_validation 方法。

更多信息,请参阅此文章: https://docs.microsoft.com/en-us/azure/active-directory/develop/id-tokens

依赖关系

~13–30MB
~523K SLoC