gin 使用 jwt
作用
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的更多相关文章
- 《HelloGitHub》第 66 期
兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 分享 GitHub 上有趣.入门级的开源项目. 这里有实战项目.入门教程.黑科技.开源书籍.大厂开源项目等,涵盖多种编程语言 Pyt ...
- gin框架教程三:JWT的使用
JWT介绍 JWT (JSON Web Token) 是一种规范.这个规范允许我们使用JWT在用户和服务器之间安全传递信息. JWT的组成: jwt分3个部分,Header 头部.Payload 载荷 ...
- 基于gin的golang web开发:认证利器jwt
JSON Web Token(JWT)是一种很流行的跨域认证解决方案,JWT基于JSON可以在进行验证的同时附带身份信息,对于前后端分离项目很有帮助. eyJhbGciOiJIUzI1NiIsInR5 ...
- 在gin框架中使用JWT
在gin框架中使用JWT JWT全称JSON Web Token是一种跨域认证解决方案,属于一个开放的标准,它规定了一种Token实现方式,目前多用于前后端分离项目和OAuth2.0业务场景下. 什么 ...
- gin框架中使用jwt
生成解析token 如今有很多将身份验证内置到API中的方法 -JSON Web令牌只是其中之一.JSON Web令牌(JWT)作为令牌系统而不是在每次请求时都发送用户名和密码,因此比其他方法(如基本 ...
- 基于gin框架和jwt-go中间件实现小程序用户登陆和token验证
本文核心内容是利用jwt-go中间件来开发golang webapi用户登陆模块的token下发和验证,小程序登陆功能只是一个切入点,这套逻辑同样适用于其他客户端的登陆处理. 小程序登陆逻辑 小程序的 ...
- gin+vue的前后端分离开源项目
该项目是gin+vue的前后端分离项目,使用gorm访问MySQL,其中vue前端是使用vue-element-admin框架简单实现的: go后台使用jwt,对API接口进行权限控制.此外,Web页 ...
- [开源]Gin + GORM + Casbin+vue-element-admin 实现权限管理系统(golang)
简析 基于 Gin + GORM + Casbin + vue-element-admin 实现的权限管理系统. 基于Casbin 实现RBAC权限管理. 前端实现: vue-element-admi ...
- go-admin基于Gin + Vue + Element UI的前后端分离权限管理系统
✨ 特性 遵循 RESTful API 设计规范 基于 GIN WEB API 框架,提供了丰富的中间件支持(用户认证.跨域.访问日志.追踪ID等) 基于Casbin的 RBAC 访问控制模型 JWT ...
- 基于gin的golang web开发:实现用户登录
前文分别介绍过了Resty和gin-jwt两个包,Resty是一个HTTP和REST客户端,gin-jwt是一个实现了JWT的Gin中间件.本文将使用这两个包来实现一个简单的用户登录功能. 环境准备 ...
随机推荐
- spring boot yaml 配置[三]
前言 我们知道java 因为历史的原因,一直有一个配置地狱的痛点.那么如何解决掉它呢? spring boot 是一柄利器,但是呢,还是要配置. 看来配置的避免不了的了. 那么如何可以减轻这种痛苦呢? ...
- css3新单位vw、vh、vmin、vmax的使用详解
1,vw.vh.vmin.vmax 的含义 (1) vw. vh. vmin. vmax 是一种视窗单位,也是相对单位.它相对的不是父节点或者页面的根节点.而是由视窗( Viewport)大小来决定的 ...
- 8k中英双语文本嵌入模型效果初探
一 模型介绍 向量模型用于生成向量表示,被广泛应用于检索.分类.聚类或语义匹配等传统的自然语言处理任务.到了大模型时代,由于上下文长度的限制,需要压缩.存储和查询大量的信息,这就需要用到向量模型对输入 ...
- 顺通ERP:精细敏捷的设计理念,得到了消费者的喜爱
顺通ERP是近年来备受关注的一款ERP品牌,其设计精细,操作便捷,备受消费者喜爱.那么,顺通ERP到底怎么样呢?属于什么档次呢? 首先,从品质上来看,顺通ERP具备高度的稳定性,能够确保企业的日常运营 ...
- vue3.0体验版生命周期
使用方法:cnpm install --save @vue/composition-api在组件内引入 把上图的 onMounted 换成(2.6->3.0) beforeCreate-> ...
- 力扣7(java)-整数反转(中等)
题目: 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果. 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0. 假设环境不允许存 ...
- 我,PolarDB云原生数据库,5年来实现这些重磅技术创新
简介: 过去5年,阿里云针对PolarDB进行了诸多创新,通过采用存储计算分离.软硬一体化设计,PolarDB实现成本仅为传统商业数据库的十分之一.所实现的计算.内存与存储资源的"三层解耦& ...
- dotnet 性能优化 利用哈希思想优化大对象集合相等判断性能
利用哈希的其中一个思想,相同的对象的哈希值相同,可以用来提升一些大对象集合的进行对象相等判断的性能.大对象的相等判断指的是有某些类型的相等判断需要用到对象的很多属性或字段进行参与判断逻辑才能判断两个对 ...
- ES6中Promise方法详解
概要 Promise是个保存异步结果的容器(对象). Promise的状态有:pending(进行中),fulfilled(已成功),rejected(已失败),对应其异步操作的状态. 状态转换: p ...
- LVGL 日志
一.启动日志 在 lv_conf.h 中将 LV_USE_LOG 设置为 1,如下图所示: 二.日志级别 在文件 lvgl/src/misc/lv_log.h 中定义了日志等级,等级是从小到大,所以 ...