18个稳定版本
2.5.0 | 2022年2月19日 |
---|---|
2.4.2 | 2021年12月3日 |
2.4.1 | 2021年4月20日 |
2.4.0 | 2020年6月22日 |
1.1.1 | 2017年2月20日 |
#1130 in 加密学
79 每月下载量
在 gauthz 中使用
30KB
594 代码行
Medallion
使用serde、serde_json和openssl编写的JWT库。
使用方法
该库提供了一个包装头和声明的 Token
类型。
extern crate medallion;
use medallion::{
Header,
DefaultPayload,
Token,
};
fn main() {
// will default to Algorithm::HS256
let header: Header = Header::default();
let payload = DefaultPayload {
iss: Some("example.com".into()),
sub: Some("Random User".into()),
..DefaultPayload::default()
};
let token = Token::new(header, payload);
token.sign(b"secret_key").unwrap();
}
Header
结构体包含JWT的所有头信息。它要求指定一个支持算法(HS256
、HS384
、HS512
、RS256
、RS384
和RS512
)。它需要一个类型来指定额外的头字段。该类型必须实现serde的Serialize
和Deserialize
,以及PartialEq
。这些特质通常可以通过派生获得,例如#[derive(PartialEq, Serialize, Deserialize)
。
extern crate medallion;
use serde::{Serialize, Deserialize};
use medallion::{Header, DefaultPayload, Token};
#[derive(Debug, Serialize, Deserialize, PartialEq)]
struct CustomHeaders {
kid: String,
typ: String,
}
fn main() {
let header = Header {
headers: CustomHeaders {
kid: "0001",)
typ: "JWT",)
}
..Header::default()
}
let payload = DefaultPayload {
iss: Some("example.com".into()),
sub: Some("Random User".into()),
..DefaultPayload::default()
};
let token = Token::new(header, payload);
token.sign(b"secret_key").unwrap();
}
Payload
结构体包含JWT的所有声明。它提供了一套已注册的公共声明。可以通过使用泛型类型的值构造 Payload
来添加额外的声明。该值的类型必须实现serde的Serialize
和Deserialize
,以及PartialEq
。这些特质通常可以通过派生获得,例如#[derive(PartialEq, Serialize, Deserialize)
。提供了一个方便的类型,DefaultPayload
,它将Payload
的泛型参数绑定到空元组类型。
extern crate medallion;
use serde::{Serialize, Deserialize};
use medallion::{Header, DefaultPayload, Token};
#[derive(Debug, Serialize, Deserialize, PartialEq)]
struct CustomHeaders {
kid: String,
typ: String,
}
#[derive(Debug, Serialize, Deserialize, PartialEq)]
struct CustomClaims {
user_id: u64,
email: String,
}
fn main() {
let header = Header {
headers: CustomHeaders {
kid: "0001",)
typ: "JWT",)
}
..Header::default()
}
let payload = DefaultPayload {
iss: Some("example.com".into()),
sub: Some("Random User".into()),
claims: CustomClaims {
user_id: 1234,
email: "[email protected]",
}
..DefaultPayload::default()
};
let token = Token::new(header, payload);
token.sign(b"secret_key").unwrap();
}
请参阅示例以获取更详细的使用方法。
此库最初是从 @mikkyang 的 rust-jwt 分叉而来。
依赖项
~3–4.5MB
~93K SLoC