#token #json #rsa #web

medallion

JWT库,使用serde、serde_json和openssl编写

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 加密学

Download history 5/week @ 2024-03-10 7/week @ 2024-03-31 55/week @ 2024-04-07 2/week @ 2024-04-14

79 每月下载量
gauthz 中使用

MIT 许可证

30KB
594 代码行

Medallion

Documentation dependency status

使用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的所有头信息。它要求指定一个支持算法(HS256HS384HS512RS256RS384RS512)。它需要一个类型来指定额外的头字段。该类型必须实现serde的SerializeDeserialize,以及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的SerializeDeserialize,以及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