gin+gorm HelloWorld(使用JWT进行身份校验)
但是,还存在一些非常严重的问题,例如,我们现在的API是可以随意调用的,这显然还不够完美,是有问题的
那么我们采用 jwt-go ( GoDoc )的方式来简单解决这个问题
go get -u github.com/dgrijalva/jwt-go
我们需要编写一个jwt的工具包,我们在pkg下的util目录新建jwt.go,写入文件内容:
在这个工具包,我们涉及到
有了jwt工具包,接下来我们要编写要用于Gin的中间件,我们在middleware下新建jwt目录,新建jwt.go文件,写入内容:
这个中间件涉及到:
那么我们如何调用它呢,我们还要获取Token呢?
1、 我们要新增一个获取Token的API
在models下新建auth.go文件,写入内容:
在routers下的api目录新建auth.go文件,写入内容:
我们打开routers目录下的router.go文件,修改文件内容(新增获取token的方法):
访问 GET ;password=test123456
2、 接下来我们将中间件接入到Gin的访问流程中
我们打开routers目录下的router.go文件,修改文件内容(新增引用包和中间件引用)
我们需要访问 ;password=test123456 ,得到token
再用包含token的URL参数去访问我们的应用API,
访问 ... ,检查接口返回值
九幅图理解使用JSON Web Token(JWT)设计单点登录系统
使用JWT做微服务的登录方案
gin 与 echo 怎样设置或取消 cookie httponly
正因为使用jwt,所以才要设置HttpOnly啊,防止js 读取 cookie
不使用 cookie , jwt_token 和 csrf_token 保存到哪里呢?
localStorage 是不能跨域的,所以只能在cookie
golang jwt鉴权分析
技术栈 gin+jwt
鉴权流程:
调用token生成方法GenerateToken生成token, 请求api时带上token参数即可
token计算逻辑:
总结:md5加密账号和密码参数,根据账号密码私钥过期时间和jwt header 分别计算hash256值,将值用.符号连接,再进行hash,结果就是token值
api 验证token:
基于 Gin 进行模块化设计的 API 框架,致力于进行快速的业务研发
基于 Gin 进行模块化设计的 API 框架,封装了常用功能,使用简单,致力于进行快速的业务研发。比如,支持 cors 跨域、jwt 签名验证、zap 日志收集、panic 异常捕获、trace 链路追踪、prometheus 监控指标、swagger 文档生成、viper 配置文件解析、gorm 数据库组件、graphql 查询语言、errno 统一定义错误码、gRPC 的使用 等等。
使用MIT开源协议
首次启动程序之后,会在浏览器中自动打开安装界面,链接地址:。
因为程序会使用到 Redis 和 MySQL,所以安装前请输入 Redis、MySQL 配置信息。
点击初始化按钮,会将用到的数据表和默认数据进行初始化,在右侧可以看到初始化的日志信息。
如上,初始化成功后,初始化的表结构 UML 图如下:
重新启动程序,会在浏览器中自动打开登录界面,链接地址: 。
输入默认账号 admin,密码 admin 即可登录成功。
显示 项目信息、内存信息、硬盘信息、CPU信息 等。
在这里可以配置系统告警的发件人和收件人,当系统发生 Panic 时,进行邮件通知,邮件模板如下:
展示系统中定义的错误码。
在左侧可以单选或多选数据表,进行代码生成。
在左侧可以设置需要生成的 handler 名称。
设置谁可以调用我的接口,同时还可以授权调用我哪些接口。
设置谁可以登录后台,可以对其进行 禁用、重置密码、菜单授权、下线、删除 等操作。
设置后台侧边栏的菜单。
查询 Redis 缓存内容 和 有效期,同时还可以清空缓存。
查询 MySQL 数据,支持输入 SQL 语句执行和分析。
不同版本提供相应的升级指导。
程序中对传递 id 的场景,均使用密文进行传递。
展示最新的 100 条调用日志。
根据指标可以在 Grafana 生成类似的指标图。
go-gin-api 是基于 Gin 进行模块化设计的 API 框架,封装了常用的功能,使用简单,致力于进行快速的业务研发,同时增加了更多限制,约束项目组开发成员,规避混乱无序及自由随意的编码。
供参考学习,线上使用请谨慎!
集成组件:
连接DB,默认是 0 ;
私信回复:模块化API框架
或访问一飞开源:
gofuntoken怎么打不开
token验证是一种web常用的身份验证手段。
在这里不讨论它的具体实现,需要在golang里实现token验证,Web框架是Gin当然这与框架没有关系步骤如下从request获取tokenstring,将tokenstring转化为未解密的token对象。
说明:
将未解密的token对象解密得到解密后的token对象,从解密后的token对象里取参数,获取解密后的token,该函数根据request,获得tokenstring,并转为未解密token对象,解密后得到解密token对象。
import github.com/dgrijalva/jwt-go/requestrequest.ParseFromRequestreq *http.Request, extractor Extractor, keyFunc jwt.Keyfuncreq即为http请求。
extractor 是一个实现了Extractor接口的对象,该接口需要实现的函ExtractToken*http.Request string, error,用于从http请求中提取tokenstring,keyFunc是一个函数,需要接受一个未解密的token。
并返回Secretkey的字节和错误信息func GetTokenr *http.Request,token *jwt.Token, err error 由request获取token,t := T t是已经实现extract接口的对象,对request进行处理得到tokenString并生成为解密的token。