#token #hash #payload #format #header #jwt #webtoken

bin+lib dswt

一种替代的 webtoken 格式

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 2024 年 6 月 9 日

12#payload

每月 21 次下载

AGPL-3.0-or-later

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?

正如我之前所说,这更多是为了乐趣和学习。然而,我实际上正在将其用于实际项目(如 nettersmple)。我个人并不是很欣赏 jwt,我认为它们可以更简单。

依赖项

~1.6-2.7MB
~56K SLoC