首页>>后端>>Golang->ginjwt

ginjwt

时间:2023-12-06 本站 点击:0

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做微服务的登录方案

正因为使用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。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/Golang/15510.html