| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- package tool
- import (
- "crypto/ed25519"
- "github.com/golang-jwt/jwt/v5"
- )
- // GenerateToken 生成 JWT token,仅支持 *ed25519.PrivateKey 私钥类型
- //
- // 参数:
- // - key: Ed25519 私钥,必须为 *ed25519.PrivateKey 类型
- // - claims: JWT 声明内容,包含用户自定义的数据
- //
- // 返回值:
- // - token: 生成的 JWT token 字符串
- // - err: 错误信息,如果生成失败则返回错误
- //
- // 示例:
- //
- // // 使用指向 Ed25519 私钥的指针
- // token, err := GenerateToken(&ed25519PrivateKey, claims)
- func GenerateToken(key *ed25519.PrivateKey, claims jwt.MapClaims) (token string, err error) {
- // 直接使用 EdDSA 签名方法生成 token
- return jwt.NewWithClaims(jwt.SigningMethodEdDSA, claims).SignedString(key)
- }
- // JWT Claims (声明) 是 JWT token 中包含的数据部分
- //
- // JWT Claims 包含三部分内容:
- // 1. 注册声明 (Registered Claims): 标准化的声明字段,包括:
- // - iss (issuer): 签发者
- // - sub (subject): 主题
- // - aud (audience): 受众
- // - exp (expiration time): 过期时间
- // - nbf (not before): 生效时间
- // - iat (issued at): 签发时间
- // - jti (JWT ID): JWT 唯一标识符
- // 2. 公共声明 (Public Claims): 预定义的公共声明字段
- // 3. 私有声明 (Private Claims): 用户自定义的声明字段
- //
- // 在 GenerateToken 函数中,claims 参数用于设置 JWT token 的声明内容
- // 示例:
- // claims := jwt.MapClaims{
- // "user_id": "12345", // 私有声明
- // "role": "admin", // 私有声明
- // "iss": "my-app", // 注册声明 - 签发者
- // "sub": "user-auth", // 注册声明 - 主题
- // "aud": "api-service", // 注册声明 - 受众
- // "exp": time.Now().Add(24 * time.Hour).Unix(), // 注册声明 - 过期时间
- // "nbf": time.Now().Unix(), // 注册声明 - 生效时间
- // "iat": time.Now().Unix(), // 注册声明 - 签发时间
- // "jti": "unique-token-id", // 注册声明 - JWT ID
- // }
|