1 个不稳定版本
0.3.0 | 2024年2月20日 |
---|
#1414 in Web编程
每月下载 29 次
34KB
553 行
jwt-simple-jwks
jwt-simple-jwks 是一个用 Rust 编写的库,用于使用 JSON Web 密钥存储(JWKS)解码和验证 JWT 令牌。
此 JWKS 客户端仅与 jwt-simple 兼容。
安装
[dependencies]
jwt-simple-jwks = "0.3"
特性
JWKS 密钥存储
- 从HTTP地址下载密钥集
- 将JWT令牌解码为头部、有效载荷和签名
- 验证令牌签名、过期时间和未开始时间
- 确定何时应该刷新密钥
- 无panic!
JWT
- 使用 jwt-simple 包提供RSA密钥的解码功能。
基本用法
以下示例演示了如何从HTTP地址加载一组密钥并使用这些密钥验证JWT令牌
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let jkws_url = "https://raw.githubusercontent.com/seanpianka/jwks-client/0.1.8/test/test-jwks.json";
let key_set = KeyStore::new_from(jkws_url.to_owned()).await.unwrap();
// ...
let token = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjEifQ.eyJuYW1lIjoiQWRhIExvdmVsYWNlIiwiaXNzIjoiaHR0cHM6Ly9jaHJvbm9nZWFycy5jb20vdGVzdCIsImF1ZCI6InRlc3QiLCJhdXRoX3RpbWUiOjEwMCwidXNlcl9pZCI6InVpZDEyMyIsInN1YiI6InNidTEyMyIsImlhdCI6MjAwLCJleHAiOjUwMCwibmJmIjozMDAsImVtYWlsIjoiYWxvdmVsYWNlQGNocm9ub2dlYXJzLmNvbSJ9.eTQnwXrri_uY55fS4IygseBzzbosDM1hP153EZXzNlLH5s29kdlGt2mL_KIjYmQa8hmptt9RwKJHBtw6l4KFHvIcuif86Ix-iI2fCpqNnKyGZfgERV51NXk1THkgWj0GQB6X5cvOoFIdHa9XvgPl_rVmzXSUYDgkhd2t01FOjQeeT6OL2d9KdlQHJqAsvvKVc3wnaYYoSqv2z0IluvK93Tk1dUBU2yWXH34nX3GAVGvIoFoNRiiFfZwFlnz78G0b2fQV7B5g5F8XlNRdD1xmVZXU8X2-xh9LqRpnEakdhecciFHg0u6AyC4c00rlo_HBb69wlXajQ3R4y26Kpxn7HA";
#[derive(Serialize, Deserialize, Debug)]
pub struct CustomClaims {
auth_time: i64,
name: String,
user_id: String,
email: String,
}
let validation = jwt_simple::prelude::VerificationOptions {
allowed_issuers: Some(HashSet::from(["https://chronogears.com/test".to_owned()])),
..Default::default()
};
match key_set.verify::<CustomClaims>(token, Some(validation)) {
Ok(claims) => {
println!("iss={}", claims.issuer.unwrap());
println!("name={}", claims.custom.name);
}
Err(Error { msg, typ }) => {
eprintln!("Could not verify token. Reason: {} {:?}", msg, typ);
}
}
Ok(())
}
作者注
用 ❤️ 在 Rust 中制作
依赖项
~16–33MB
~608K SLoC