当前位置: 首页 > news >正文

Go基础(⑧JSON Web Token)

1. 生成 JWT

创建简单的 JWT 生成函数

// 简单生成 JWT
func SimpleGenerateToken(userID int, username string) (string, error) {// 1. 创建声明claims := jwt.MapClaims{"user_id":  userID,"username": username,"role":     "user","exp":      time.Now().Add(24 * time.Hour).Unix(), // 24小时后过期}// 2. 创建 Tokentoken := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)// 3. 签名并返回return token.SignedString([]byte("my-secret-key"))
}

2. 解析 JWT

创建简单的 JWT 解析函数

// 简单解析 JWT
func SimpleParseToken(tokenString string) (map[string]interface{}, error) {// 1. 解析 Tokentoken, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {// 2. 验证签名算法if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {return nil, fmt.Errorf("unexpected signing method: %v", token.Header["alg"])}// 3. 返回签名密钥return []byte("my-secret-key"), nil})if err != nil {return nil, err}// 4. 验证 Token 有效性if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid {return claims, nil}return nil, fmt.Errorf("invalid token")
}

3. 完整例子

生成和解析 JWT

package mainimport ("fmt""log""time""github.com/golang-jwt/jwt/v5"
)// 简单生成 JWT
func SimpleGenerateToken(userID int, username string) (string, error) {// 1. 创建声明claims := jwt.MapClaims{"user_id":  userID,"username": username,"role":     "user","exp":      time.Now().Add(24 * time.Hour).Unix(), // 24小时后过期}// 2. 创建 Tokentoken := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)// 3. 签名并返回return token.SignedString([]byte("my-secret-key"))
}// 简单解析 JWT
func SimpleParseToken(tokenString string) (map[string]interface{}, error) {// 1. 解析 Tokentoken, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {// 2. 验证签名算法if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {return nil, fmt.Errorf("unexpected signing method: %v", token.Header["alg"])}// 3. 返回签名密钥return []byte("my-secret-key"), nil})if err != nil {return nil, err}// 4. 验证 Token 有效性if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid {return claims, nil}return nil, fmt.Errorf("invalid token")
}func main() {// 1. 生成 JWTfmt.Println("=== 生成 JWT ===")token, err := SimpleGenerateToken(1, "testuser")if err != nil {log.Fatal("生成失败:", err)}fmt.Printf("生成的 Token: %s\n\n", token)// 2. 解析 JWTfmt.Println("=== 解析 JWT ===")claims, err := SimpleParseToken(token)if err != nil {log.Fatal("解析失败:", err)}// 3. 显示解析结果fmt.Printf("用户ID: %v\n", claims["user_id"])fmt.Printf("用户名: %v\n", claims["username"])fmt.Printf("角色: %v\n", claims["role"])fmt.Printf("过期时间: %v\n", claims["exp"])
}

4. 运行结果

输出示例

=== 生成 JWT ===
生成的 Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MDY0NDgwMDAsInJvbGUiOiJ1c2VyIiwidXNlcl9pZCI6MSwidXNlcm5hbWUiOiJ0ZXN0dXNlciJ9.signature=== 解析 JWT ===
用户ID: 1
用户名: testuser
角色: user
过期时间: 1706448000

123

http://www.dtcms.com/a/423162.html

相关文章:

  • MR+AI变革传统MRO,提升工作效率
  • 每周读书与学习->初识JMeter 元件(三)
  • MR模板以及代码审查规范
  • 什么是网站推广优化剧院网站建设
  • dede如何手机网站和电脑网站的数据同步更新网站改版是什么意思
  • ubuntu安装go
  • 用 go-commons 高效处理字符串
  • 二手网站建设论文广州做网站多少钱
  • 网站建设前端工程师岗位职责网页设计页面代码
  • 从神经信号到驾驶安全:Mentalab无线脑电图系统赋能汽车人因研究与HMI优化
  • AST语法树应用于sql检查
  • 分转科技:科技乐享生活,时尚分转未来
  • 推广型网站免费建设网页开发价格
  • Livox-Mid360驱动安装(ROS1/Ubuntu20.04)
  • 建设厅网站查询电工证件做枪版视频网站犯法吗
  • 开启C++新世界:从函数到对象的两天思维跃迁
  • C# 中Ping 网络连通性检测实战
  • 阿里 + 南洋理工新突破!MMR1 模型破解多模态推理训练难题,开源160 万数据 + 15k RL 样本!
  • 多模态PDF解析
  • 如何判断模型矩阵是否做了镜像
  • C语言常量和存储类别详解
  • 计算机视觉进阶教学之Mediapipe库(一)
  • 《道德经》第八章
  • 开源 C# 快速开发(十一)线程
  • 大学生网站建设策划书响应式网站用什么开发的
  • 交换机可以做网站跳转吗wordpress 目录样式
  • 第2章 三个小工具的编写(1)
  • 生态系统NPP及碳源、碳汇模拟实践技术应用
  • 【Rust GUI开发入门】编写一个本地音乐播放器(3. UI与后台线程通信)
  • P11013 「ALFR Round 4」C 粉碎 题解