2 个版本

0.0.4 2022年1月15日
0.0.3 2022年1月14日
0.0.2 2022年1月14日
0.0.1 2022年1月14日

#1729 in 加密学

AGPL-3.0

20KB
331

TENET

糟糕的 jwt 实现

Crates.io docs.rs Crates.io

[dependencies.jwt]
package="tenet"
version = "*"
features = ["HS256"]

不要使用这个

这个库速度慢,实现简单,总共花费20分钟编写和调试。

你最好使用另一个经过验证的 JWT 实现

为什么存在? 我对签名字令和验证令牌的糟糕 API 设计感到厌倦。

  • 这个库只有两种不同的令牌类型。
  • 这个库不对令牌的有效载荷进行任何验证。

类型

这个库有两种令牌类型

  • 一个具有给定类型(Token<T>)的未签名令牌
  • 一个已签名令牌(SignedToken

令牌算法由枚举 TokenAlgorithm 决定

支持算法

  • HS256
  • HS512

示例

use serde::{Serialize, Deserialize};
use jwt::{Token, TokenAlgorithm, SignedToken};

// Create a new token type.
// This uses serde's Serialize and Deserialize procedural macros.
#[derive(Serialize, Deserialize, Debug)]
struct MyToken {
    foo: u8,
    bar: bool,
    baz: String,
}

// create a key to sign and verify tokens.
let token_key = b"VERY_SECURE_KEY".to_vec();

// create a new token, sign it, and get the string representation
let token = Token::create(
    TokenAlgorithm::HS256,
    MyToken { foo: 10, bar: true, baz: "Hello World".to_string() }
)
.sign(&token_key).unwrap().string();

println!("{}", token);

// verify a token input
let payload = Token::<MyToken>::verify(token, &token_key).unwrap();

println!("{:?}", payload);

依赖项

~0.9–1.8MB
~40K SLoC