作用

JWT 的主要作用是方便客戶端與伺服器之間的身份驗證。 使用JWT 可以在不需要每次登入的情況下,在客戶端與伺服器之間安全地傳遞封裝身份信息。 它還可以用於許多其他用途,例如串接多個服務,並將數據在服務間安全地傳遞。

简单类说jwt作用在c/s模型中的通信过程中,用于验证c端是否具有访问权限。

一般在jwt中包含一些基本信息,包括用户名,时间戳等。可以在一定承担上防止重放攻击。

注意:自jwt的内容部分,切勿包含任何如密码等敏感信息,因为jwt是使用明文传递的。

在jwt中需要双发线下协商一个所secret,在之后的请求中c端将使用这个secret最jwt做签名,服务端使用这个secret验证签名,签名的内容明文传输。

在gin中使用jwt

gin可以使用中间件的形式完成jwt校验

	// node config group
nodeGroup := router.Group(methods.NodeTag, methods.JWTMiddleware())
initNodeConfigControllers(nodeGroup)

以上是在 NodeTag 这个请求组里面添加JWT校验,这样只作用与这一个请求组,也可以针对某个请求做校验或全部请求都做校验。

注意,一般将JWT的token放在请求头里面,不要放在请求体里面

JWT校验函数一般格式

func JWTMiddleware() gin.HandlerFunc {
return func(ctx *gin.Context) {
user_token := ctx.GetHeader("Authorization")
token, err := jwt.Parse(user_token, func(token *jwt.Token) (interface{}, error) {
if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"])
}
return []byte(configuration.GetToken()), nil // 此处GetToken得到的就是双发协定好的secret
})
if err != nil {
log.Error("Token parsing error", "err", err)
ReturnErrorResp(ctx, http.StatusUnauthorized, PermissionError, err.Error())
ctx.Abort()
return
} // 验证解析后的令牌是否有效
if !token.Valid {
log.Error("Invalid token")
ReturnErrorResp(ctx, http.StatusUnauthorized, PermissionError, "token is ill")
ctx.Abort()
return
} else {
// 从令牌中提取有效载荷 (claims)
claims, ok := token.Claims.(jwt.MapClaims)
if ok {
if !claims.VerifyExpiresAt(time.Now().Unix(), true) {
log.Error("jwt token timeout")
ReturnErrorResp(ctx, http.StatusUnauthorized, PermissionError, "token is ill")
ctx.Abort()
return
}
} else {
log.Error("Invalid token claims")
ReturnErrorResp(ctx, http.StatusUnauthorized, PermissionError, "token is ill")
ctx.Abort()
return
}
}
ctx.Next()
}
}

gin 使用 jwt的更多相关文章

  1. 《HelloGitHub》第 66 期

    兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 分享 GitHub 上有趣.入门级的开源项目. 这里有实战项目.入门教程.黑科技.开源书籍.大厂开源项目等,涵盖多种编程语言 Pyt ...

  2. gin框架教程三:JWT的使用

    JWT介绍 JWT (JSON Web Token) 是一种规范.这个规范允许我们使用JWT在用户和服务器之间安全传递信息. JWT的组成: jwt分3个部分,Header 头部.Payload 载荷 ...

  3. 基于gin的golang web开发:认证利器jwt

    JSON Web Token(JWT)是一种很流行的跨域认证解决方案,JWT基于JSON可以在进行验证的同时附带身份信息,对于前后端分离项目很有帮助. eyJhbGciOiJIUzI1NiIsInR5 ...

  4. 在gin框架中使用JWT

    在gin框架中使用JWT JWT全称JSON Web Token是一种跨域认证解决方案,属于一个开放的标准,它规定了一种Token实现方式,目前多用于前后端分离项目和OAuth2.0业务场景下. 什么 ...

  5. gin框架中使用jwt

    生成解析token 如今有很多将身份验证内置到API中的方法 -JSON Web令牌只是其中之一.JSON Web令牌(JWT)作为令牌系统而不是在每次请求时都发送用户名和密码,因此比其他方法(如基本 ...

  6. 基于gin框架和jwt-go中间件实现小程序用户登陆和token验证

    本文核心内容是利用jwt-go中间件来开发golang webapi用户登陆模块的token下发和验证,小程序登陆功能只是一个切入点,这套逻辑同样适用于其他客户端的登陆处理. 小程序登陆逻辑 小程序的 ...

  7. gin+vue的前后端分离开源项目

    该项目是gin+vue的前后端分离项目,使用gorm访问MySQL,其中vue前端是使用vue-element-admin框架简单实现的: go后台使用jwt,对API接口进行权限控制.此外,Web页 ...

  8. [开源]Gin + GORM + Casbin+vue-element-admin 实现权限管理系统(golang)

    简析 基于 Gin + GORM + Casbin + vue-element-admin 实现的权限管理系统. 基于Casbin 实现RBAC权限管理. 前端实现: vue-element-admi ...

  9. go-admin基于Gin + Vue + Element UI的前后端分离权限管理系统

    ✨ 特性 遵循 RESTful API 设计规范 基于 GIN WEB API 框架,提供了丰富的中间件支持(用户认证.跨域.访问日志.追踪ID等) 基于Casbin的 RBAC 访问控制模型 JWT ...

  10. 基于gin的golang web开发:实现用户登录

    前文分别介绍过了Resty和gin-jwt两个包,Resty是一个HTTP和REST客户端,gin-jwt是一个实现了JWT的Gin中间件.本文将使用这两个包来实现一个简单的用户登录功能. 环境准备 ...

随机推荐

  1. mongodb基础整理篇————设计[四]

    前言 简单整理一下mongodb的设计. 正文 设计三步曲: 第一步:建立基础文档模型 例子: 1对1建模: 1 对多建模: N对N模型: 第二步: 根据读写况细化 遇到的问题: 解决: 查询连表: ...

  2. xml转voc,voc转coco,coco转yolo,coco划分,coco检查,yolo检查,coco可视化

    平常用coco格式的数据集比较多,所有这里整合一下数据集相关的常用的脚本. pycocotools安装 这个非常重要,因为处理coco数据集时,用pycocotools包非常方便. 自行搜索一下怎么安 ...

  3. 配置服务器SSH PAM防止暴力破解

    正常机器如果开启ssh可能会被暴力破解用户密码,可以配置ssh的pam限制登录失败时可以锁定用户一段时间,就算密码输入正确也无法登录,等恢复之后才可以再次进入,对于不同的发行版配置可能略有不同,对于r ...

  4. 【Oracle】使用like的时候遇到的问题

    [Oracle]使用like的时候遇到的问题 like语句其中的%就代表着一个零或者多个字符,_代表一个字符,%与_可以同时使用 name想查询以'_'结尾的字符 用这个语句就会有问题 select ...

  5. 如何在 ACK 中使用 MSE Ingress

    简介: 本文将为大家分享一下 Ingress 标准 和 实现的趋势,介绍一下 MSE Ingress 在这个趋势下的优势和实践,为大家做关键入口选择多一些参考. 作者:彦林 随着云原生架构的普及,K8 ...

  6. 可观测|时序数据降采样在Prometheus实践复盘

    简介: 基于 Prometheus 的监控实践中,尤其是在规模较大时,时序数据的存储与查询是其中非常关键,而且问题点较多的一环.如何应对大数据量下的长周期查询,原生的 Prometheus 体系并未能 ...

  7. 使用AnalyticDB轻松实现以图搜图和人脸检索

    1. 背景 以图搜图在生活中有着广泛的应用, 当我们在电视上看到有人穿着一件美丽的裙子或者帅气的球鞋也想拥有时, 我们可以拍张照片然后打开淘宝然后上传照片就可以快速的找到这个商品. 我们看到一张电影截 ...

  8. 系统架构面临的三大挑战,看 Kubernetes 监控如何解决?

    ​简介: 随着 Kubernetes 的不断实践落地,我们经常会遇到负载均衡.集群调度.水平扩展等问题.归根到底,这些问题背后都暴露出流量分布不均的问题.那么,我们该如何发现资源使用,解决流量分布不均 ...

  9. [Go] golang 去除 URI 链接中的 query string 参数

    思路是使用 golang 的 net/url 包提供的方法解析url各部分,其中 URL.RawQuery 为查询参数部分,格式如 :a=b&c=d 然后我们再通过 strings.Repla ...

  10. dotnet OpenXML 解析 PPT 里表格的样式

    在 PPT 里面的表格可以通过表格样式配置决定表格的样式,本文将和大家介绍如何获取和解析表格的样式 本文属于 OpenXML 系列博客,有一定的上下文,详细请参阅 Office 使用 OpenXML ...