#jwt #token #json #web

jwt_rs

A Json Web Token (JWT) implementation for Rust

1 个不稳定版本

0.1.0 2022年3月15日

#144 in #jwt

MIT 许可证

18KB
282 代码行(不包括注释)

JWT.rs

一个简单的 Json Web Token(JWT)包。该包允许您创建、签名、验证和从 JWT 令牌中提取数据。数据使用 serdeserde_json 进行序列化。

示例

验证

如果令牌有效,从 JWT 令牌中提取有效负载。

#[derive(serde::Serialize, serde::Deserialize, PartialEq)]
struct TestPayload {
    is_admin: bool,
    name: String,
    age: u8,
}

const SECRET: &'static str = "This is a very secret secret";

let token_str = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc19hZG1pbiI6dHJ1ZSwibmFtZSI6IkpvaG4gRG9lIiwiYWdlIjoxOH0.0mV5XVAmarscyZEwl8PoX4vqVn_JCZSVJRsgnSJTo94";
let token = Token::from_str(token_str)?;
// payload is `Ok(Some(<payload>))`
let payload = token.get_if_valid::<TestPayload>(SECRET);

签名

还可以创建并签名新的令牌

const SECRET: &'static str = "This is a very secret secret";

#[derive(serde::Serialize, serde::Deserialize)]
struct TestPayload {
    is_admin: bool,
    name: String,
    age: u8,
}
let payload = TestPayload {
    is_admin: true,
    name: String::from("John Doe"),
    age: 18
};
let token = Token::try_new(Algorithm::HS256, payload, SECRET).unwrap();
println!("{}", token); // Convert the token to a string.

依赖关系

~1.3–2.2MB
~47K SLoC