golang中gin框架接入jwt如何使用token验证身份
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,本篇内容介绍了"golang中gin框架接入jwt如何使用token验证身份"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔
千家信息网最后更新 2026年10月31日golang中gin框架接入jwt如何使用token验证身份jwt
流程:
1.token 工具类
2. 使用该中间件
3. controller部分代码
本篇内容介绍了"golang中gin框架接入jwt如何使用token验证身份"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
jwt
jwt的原理和session有点相像,其目的是为了解决rest api中无状态性
因为rest接口,需要权限校验。但是又不能每个请求都把用户名密码传入,因此产生了这个token的方法
流程:
用户访问auth接口,获取token
服务器校验用户传入的用户名密码等信息,确认无误后,产生一个token。这个token其实是类似于map的数据结构(jwt数据结构)中的key。
准确的应该是:token中其实就保存了用户的信息,只是被加密过了。怪不得服务器重启了token还能使用,就是这个原因,因为数据就是保存在token这条长长的字符串中的。
用户访问需要权限验证的接口,并传入token。
服务器验证token:根据自己的token密钥判断token是否正确(是否被别人篡改),正确后才从token中解析出token中的信息。可能会把解析出的信息保存在context中
1、这里使用开源的 jwt-go
1.token 工具类
package handlerimport ( "awesomeProject/utils" "github.com/dgrijalva/jwt-go" "github.com/gin-gonic/gin" "time")//用户信息类,作为生成token的参数type UserClaims struct { ID string `json:"userId"` Name string `json:"name"` Phone string `json:"phone"` //jwt-go提供的标准claim jwt.StandardClaims}var ( //自定义的token秘钥 secret = []byte("16849841325189456f487") //该路由下不校验token noVerify = []interface{}{"/login", "/ping"} //token有效时间(纳秒) effectTime = 2 * time.Hour)// 生成tokenfunc GenerateToken(claims *UserClaims) string { //设置token有效期,也可不设置有效期,采用redis的方式 // 1)将token存储在redis中,设置过期时间,token如没过期,则自动刷新redis过期时间, // 2)通过这种方式,可以很方便的为token续期,而且也可以实现长时间不登录的话,强制登录 //本例只是简单采用 设置token有效期的方式,只是提供了刷新token的方法,并没有做续期处理的逻辑 claims.ExpiresAt = time.Now().Add(effectTime).Unix() //生成token sign, err := jwt.NewWithClaims(jwt.SigningMethodHS256, claims).SignedString(secret) if err != nil { //这里因为项目接入了统一异常处理,所以使用panic并不会使程序终止,如不接入,可使用原始方式处理错误 //接入统一异常可参考 https://blog.csdn.net/u014155085/article/details/106733391 panic(err) } return sign}//验证tokenfunc JwtVerify(c *gin.Context) { //过滤是否验证token if utils.IsContainArr(noVerify, c.Request.RequestURI) { return } token := c.GetHeader("token") if token == "" { panic("token not exist !") } //验证token,并存储在请求中 c.Set("user", parseToken(token))}// 解析Tokenfunc parseToken(tokenString string) *UserClaims { //解析token token, err := jwt.ParseWithClaims(tokenString, &UserClaims{}, func(token *jwt.Token) (interface{}, error) { return secret, nil }) if err != nil { panic(err) } claims, ok := token.Claims.(*UserClaims) if !ok { panic("token is valid") } return claims}// 更新tokenfunc Refresh(tokenString string) string { jwt.TimeFunc = func() time.Time { return time.Unix(0, 0) } token, err := jwt.ParseWithClaims(tokenString, &UserClaims{}, func(token *jwt.Token) (interface{}, error) { return secret, nil }) if err != nil { panic(err) } claims, ok := token.Claims.(*UserClaims) if !ok { panic("token is valid") } jwt.TimeFunc = time.Now claims.StandardClaims.ExpiresAt = time.Now().Add(2 * time.Hour).Unix() return GenerateToken(claims)}2. 使用该中间件
func main() { router := gin.Default() router.Use(handler.JwtVerify) router.GET("/ping", controller.Ping) router.GET("/login", controller.Login) router.GET("/userInfo", controller.UserInfo) router.Run(":8888") // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")}3. controller部分代码
package controllerimport ( "awesomeProject/handler" "awesomeProject/utils" "github.com/dgrijalva/jwt-go" "github.com/gin-gonic/gin" "net/http")func Ping(c *gin.Context) { c.JSON(http.StatusOK, utils.ResultT("this is ping"))}func Login(c *gin.Context) { c.JSON(http.StatusOK, utils.ResultT(gin.H{ "token": handler.GenerateToken(&handler.UserClaims{ ID: "001", Name: "张三", Phone: "189***0023", StandardClaims: jwt.StandardClaims{}, }), }))}func UserInfo(c *gin.Context) { user, _ := c.Get("user") claims := user.(*handler.UserClaims) c.JSON(http.StatusOK, utils.ResultT(claims.Phone))}"golang中gin框架接入jwt如何使用token验证身份"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
验证
用户
接入
信息
有效
方式
只是
接口
数据
时间
有效期
服务器
处理
服务
生成
框架
身份
内容
密码
就是
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
上海卓越科技互联网
互联网金融监管科技数据
互联网科技财经
深圳齐家互联网科技
左右互联网络科技
互联网科技生活的内容
深圳国际航运科技和互联网
昭通互联网科技选哪家
知域互联网科技有限公司大骗子
中国互联网十大科技股排名
华夏恒生科技与互联网科技
济南有互联网科技公司吗
群盈汇互联网科技有限公司
广州互联网高科技取餐柜
互联网科技手抄报图片
上海互联网科技园景观
安徽九吞吴互联网科技有限公司
上海旺乐尼互联网科技有限公司
互联网科技企业文化
互联网科技快速发展优美句子
中关村互联网 科技集团
深圳齐家互联网科技
互联网女皇 腾讯科技
华脉科技工业互联网产品
小米互联网科技园设置
互联网科技和信息
广西互联网科技孵化中心
中国互联网有什么科技
雨阳互联网卡科技有限公司
广州富喜互联网络科技