1 个不稳定版本
0.1.0 | 2024年3月21日 |
---|
#36 in #ristretto
23KB
453 行
Ristretto256 JSON Webtoken (JWT)
这是使用 Ristretto255 椭圆曲线实现的 JWT。
它扩展了来自 jwt-compact 包的 traits,后者又可以通过 actix-jwt-auth-middleware 作为 actix-web 的中间件使用。
使用方法
使用 Ristretto 密钥对 Web 令牌进行签名和验证,这些密钥定义在 tari_crypto 中。
创建令牌
使用有效载荷和密钥创建令牌
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
struct LoginInfo {
username: String,
admin: bool,
}
let mut claims = Claims::new(Info {
username: "alice".to_string(),
admin: true,
});
// Set claims.expiry etc...
let signing_key = Ristretto256SigningKey::from_slice(&SIGNING_KEY).unwrap();
let verifying_key = Ristretto256VerifyingKey::from_slice(&KEY).unwrap();
let token = Ristretto256
.token(&Header::empty(), &claims, &signing_key)
.unwrap();
令牌将是一个类似于以下 JSON 对象
eyJhbGciOiJSaXN0cmV0dG8yNTYiLCJ0eXAiOiJKV1QifQ.
eyJleHAiOjE3MDk4MDU2MDAsImlhdCI6MTcwOTIwMDgwMCwidXNlcm5hbWUiOiJhbGljZSIsImFkbWluIjp0cnVlfQ.
Ji2VxhHUBDcK-knCNGmGeBbo395X9d2R1Y1ikr0-C1sFQKeooNXae9DQLpC0cAd1XsrnRiw9gmM7UR6wH_kxCg
验证令牌
要验证令牌,请使用 verify
方法
let token = "eyJhbGciOiJSa..."; // A token
let public_key = Ristretto256VerifyingKey::from_slice(&PUBLIC_KEY).unwrap();
let jwt = Ristretto256.validator::<LoginInfo>(&public_key)
.validate(&token)
.unwrap();
let login_info = token.claims().custom;
依赖项
~11MB
~188K SLoC