Skip to content

Token 风格

English | 中文文档

sa-token-rust 支持多种 Token 生成风格,满足不同场景需求。

rust
use sa_token_core::SaTokenConfig;
use sa_token_core::config::TokenStyle;

let config = SaTokenConfig::builder()
    .token_style(TokenStyle::Tik)  // 选择你喜欢的风格
    .build_config();

可用的 Token 风格

风格长度示例使用场景
Uuid36 字符550e8400-e29b-41d4-a716-446655440000标准 UUID 格式,通用性强
SimpleUuid32 字符550e8400e29b41d4a716446655440000无横杠的 UUID,更紧凑
Random3232 字符a3f5c9d8e2b7f4a6c1e8d3b9f2a7c5e1随机十六进制字符串,安全性好
Random6464 字符a3f5c9d8...更长的随机字符串,安全性更高
Random128128 字符a3f5c9d8...最长随机字符串,超高安全性
Jwt可变长度eyJhbGc...自包含令牌,带有声明信息
Hash64 字符472c7dce...SHA256 哈希,包含用户信息,可追溯
Timestamp~30 字符1760404107094_a8f4f17d88fcddb8包含时间戳,易于追踪
Tik8 字符GIxYHHD5短小精悍,适合分享

Token 风格示例

rust
// Uuid 风格(默认)
.token_style(TokenStyle::Uuid)
// 输出: 550e8400-e29b-41d4-a716-446655440000

// Hash 风格 - 哈希中包含用户信息
.token_style(TokenStyle::Hash)
// 输出: 472c7dceee2b3079a1ae70746f43ba99b91636292ba7811b3bc8985a1148836f

// Timestamp 风格 - 包含毫秒级时间戳
.token_style(TokenStyle::Timestamp)
// 输出: 1760404107094_a8f4f17d88fcddb8

// Tik 风格 - 短小的8位字符 token
.token_style(TokenStyle::Tik)
// 输出: GIxYHHD5

// JWT 风格 - 自包含令牌
.token_style(TokenStyle::Jwt)
.jwt_secret_key("your-secret-key")
// 输出: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

如何选择 Token 风格

  • Uuid/SimpleUuid: 标准选择,兼容性广
  • Random32/64/128: 需要特定长度的随机 token 时
  • JWT: 需要自包含令牌,内嵌信息时
  • Hash: 需要可追溯到用户信息的 token 时
  • Timestamp: 需要知道 token 创建时间时
  • Tik: 需要短小 token 用于分享(URL、二维码等)时

风格详解

Uuid(默认)

标准 UUID v4 格式。36 个字符,带连字符。通用性强,与大多数系统兼容。

SimpleUuid

无连字符的 UUID v4。32 个字符,存储和 URL 使用更紧凑,同时保持相同的唯一性保证。

Random32/64/128

密码学随机十六进制字符串。更长的字符串提供更高的熵值:

  • Random32:128 位熵
  • Random64:256 位熵
  • Random128:512 位熵

Jwt

自包含的 JSON Web Token,支持自定义声明。支持 8 种算法(HS256/384/512、RS256/384/512、ES256/384)。详见 JWT 指南

Hash

SHA256 哈希,结合用户 ID、时间戳和随机盐值生成。生成的 token 可以通过服务器存储的映射追溯到原始用户。

Timestamp

以毫秒精度的 Unix 时间戳为前缀,后跟随机组件。对于审计和调试非常有用——仅通过查看即可知道 token 的签发时间。

Tik

超短 8 字符字母数字 token。专为需要口头分享、打印在二维码上或在短 URL 中使用 token 的场景设计。权衡:长度更短意味着熵值更低——仅在便利性超过安全影响时使用。

运行示例

bash
cargo run --example token_styles_example

基于 Apache-2.0 / MIT 协议发布。