#jwt #ristretto #token #key #traits #jwt-compat #ristretto256

tari-jwt

Ristretto JWT 支持jwt-compat

1 个不稳定版本

0.1.0 2024年3月21日

#36 in #ristretto

BSD-3-Clause

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