GenerateToken.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package tool
  2. import (
  3. "crypto/ed25519"
  4. "github.com/golang-jwt/jwt/v5"
  5. )
  6. // GenerateToken 生成 JWT token,仅支持 *ed25519.PrivateKey 私钥类型
  7. //
  8. // 参数:
  9. // - key: Ed25519 私钥,必须为 *ed25519.PrivateKey 类型
  10. // - claims: JWT 声明内容,包含用户自定义的数据
  11. //
  12. // 返回值:
  13. // - token: 生成的 JWT token 字符串
  14. // - err: 错误信息,如果生成失败则返回错误
  15. //
  16. // 示例:
  17. //
  18. // // 使用指向 Ed25519 私钥的指针
  19. // token, err := GenerateToken(&ed25519PrivateKey, claims)
  20. func GenerateToken(key *ed25519.PrivateKey, claims jwt.MapClaims) (token string, err error) {
  21. // 直接使用 EdDSA 签名方法生成 token
  22. return jwt.NewWithClaims(jwt.SigningMethodEdDSA, claims).SignedString(key)
  23. }
  24. // JWT Claims (声明) 是 JWT token 中包含的数据部分
  25. //
  26. // JWT Claims 包含三部分内容:
  27. // 1. 注册声明 (Registered Claims): 标准化的声明字段,包括:
  28. // - iss (issuer): 签发者
  29. // - sub (subject): 主题
  30. // - aud (audience): 受众
  31. // - exp (expiration time): 过期时间
  32. // - nbf (not before): 生效时间
  33. // - iat (issued at): 签发时间
  34. // - jti (JWT ID): JWT 唯一标识符
  35. // 2. 公共声明 (Public Claims): 预定义的公共声明字段
  36. // 3. 私有声明 (Private Claims): 用户自定义的声明字段
  37. //
  38. // 在 GenerateToken 函数中,claims 参数用于设置 JWT token 的声明内容
  39. // 示例:
  40. // claims := jwt.MapClaims{
  41. // "user_id": "12345", // 私有声明
  42. // "role": "admin", // 私有声明
  43. // "iss": "my-app", // 注册声明 - 签发者
  44. // "sub": "user-auth", // 注册声明 - 主题
  45. // "aud": "api-service", // 注册声明 - 受众
  46. // "exp": time.Now().Add(24 * time.Hour).Unix(), // 注册声明 - 过期时间
  47. // "nbf": time.Now().Unix(), // 注册声明 - 生效时间
  48. // "iat": time.Now().Unix(), // 注册声明 - 签发时间
  49. // "jti": "unique-token-id", // 注册声明 - JWT ID
  50. // }