#jwt #cognito #token #jwk #jwks #access-token

jsonwebtokens-cognito

解码并验证由AWS Cognito签发的Json Web Tokens

9个版本

0.1.1 2022年5月8日
0.1.0-alpha.102021年8月15日
0.1.0-alpha.92020年1月17日
0.1.0-alpha.82019年12月30日

#294 in 身份验证

Download history 381/week @ 2024-03-30 523/week @ 2024-04-06 341/week @ 2024-04-13 369/week @ 2024-04-20 251/week @ 2024-04-27 269/week @ 2024-05-04 338/week @ 2024-05-11 251/week @ 2024-05-18 325/week @ 2024-05-25 327/week @ 2024-06-01 223/week @ 2024-06-08 230/week @ 2024-06-15 216/week @ 2024-06-22 237/week @ 2024-06-29 244/week @ 2024-07-06 289/week @ 2024-07-13

1,025 每月下载量
用于 actix-web-middleware-cogn…

MIT 许可证

21KB
253 代码行

Rust库,用于验证AWS Cognito签发的Json Web Tokens

安装

jsonwebtokens-cognito = "0.1.0-alpha"

用法

let keyset = KeySet::new("eu-west-1", "my-user-pool-id")?;
let verifier = keyset.new_id_token_verifier(&["client-id-0", "client-id-1"])
    .string_equals("custom_claim0", "value")
    .string_equals("custom_claim1", "value")
    .build()?;

let claims = keyset.verify(token, &verifier).await?;

此库基于jsonwebtokens令牌验证器。

密钥集在验证第一个令牌时将从适当的.jwks url获取,或者,也可以通过调用keyset.prefetch_jwks()来预先加载缓存

let keyset = KeySet::new("eu-west-1", "my-user-pool-id")?;
keyset.prefetch_jwks().await?;

如果您需要在非异步上下文中执行令牌验证,或者不希望在验证令牌时允许网络I/O,那么如果您已显式预取了jwks密钥集,则可以使用try_verify验证令牌

let keyset = KeySet::new("eu-west-1", "my-user-pool-id")?;
keyset.prefetch_jwks().await?;
let verifier = keyset.new_id_token_verifier(&["client-id-0", "client-id-1"])
    .string_equals("custom_claim0", "value")
    .string_equals("custom_claim1", "value")
    .build()?;

let claims = keyset.try_verify(token, verifier).await?;

try_verify()如果在预取中未找到所需的密钥,将返回CacheMiss错误

密钥集是Send安全的,因此可以在多线程服务器中进行身份验证。

示例

验证AWS Cognito访问令牌

let keyset = KeySet::new(AWS_REGION, AWS_POOL_ID)?;
let verifier = keyset.new_access_token_verifier(&[AWS_CLIENT_ID]).build()?;

keyset.verify(&token_str, &verifier).await?;

验证AWS Cognito身份令牌

let keyset = KeySet::new(AWS_REGION, AWS_POOL_ID)?;
let verifier = keyset.new_id_token_verifier(&[AWS_CLIENT_ID]).build()?;

keyset.verify(&token_str, &verifier).await?;

验证带有自定义声明的AWS Cognito访问令牌

let keyset = KeySet::new(AWS_REGION, AWS_POOL_ID)?;
let verifier = keyset.new_access_token_verifier(&[AWS_CLIENT_ID])
    .string_equals("my_claim", "foo")
    .build()?;

keyset.verify(&token_str, &verifier).await?;

有关如何验证自定义声明的更多示例,请参阅jsonwebtokens

依赖项

~10–26MB
~463K SLoC