4 个版本
0.1.4 | 2024 年 7 月 14 日 |
---|---|
0.1.3 | 2024 年 7 月 14 日 |
0.1.2 | 2024 年 6 月 9 日 |
0.1.1 | 2024 年 6 月 9 日 |
0.1.0 |
|
12 在 #payload
每月 21 次下载
19KB
199 行
分隔符分隔的 Web 令牌
我感到无聊,决定制作自己的令牌格式。这是一个简单的令牌格式,使用分隔符来分隔令牌的头部、负载和哈希,而不是使用像 JWT 那样的 JSON。
安装
待办
示例
use std::collections::HashMap;
use dswt::{
Algorithm,
Token,
TokenManager
};
fn main() {
// Create a payload
let payload: HashMap<String, String> = [
("key1".to_string(), "value1".to_string()),
("key2".to_string(), "value2".to_string()),
("key3".to_string(), "value3".to_string()),
].iter().cloned().collect();
// initialize a token manager
let token_manager = TokenManager::new(
Algorithm::HS256,
"your_key" // set this to your secret key
);
// create a token from the payload
let token: Token = token_manager.create_token(payload);
let token_str = token.to_string();
}
格式
DSWT 令牌的整体结构为 <header>;<payload>;<hash>
。每个部分都是一个 base64 编码的字符串,表示令牌的不同部分。每个部分之间用分号 ;
分隔。
头部
头部是令牌的第一部分,它包含有关令牌的信息,例如版本和用于哈希负载的算法。它是 base64 编码的,格式为 DSWT-<ver>/<alg>
。其中 <ver>
是令牌的版本,<alg>
是用于哈希负载的算法。
负载
负载是令牌的第二部分,它包含令牌应表示的数据。它是 base64 编码的,格式为 key1=value,key2=value,...
。每个键值对之间用逗号 ,
分隔。
哈希
哈希是令牌的最后一部分,它是头部和负载的哈希,用于验证令牌的有效性。
完整令牌示例
为了给出 DSWT 令牌的完整示例,以下是一个完整的示例令牌,未进行 base64 编码将如下所示
DSWT-<ver>/<alg>;<key1>=<value>,<key2>=<value2>;<hash>
为什么不使用 JWT?
正如我之前所说,这更多是为了乐趣和学习。然而,我实际上正在将其用于实际项目(如 netter 和 smple)。我个人并不是很欣赏 jwt,我认为它们可以更简单。
依赖项
~1.6-2.7MB
~56K SLoC