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 // }