Go Gin使用JWT实现认证机制

什么是JWT

JWT是JSON Web Token的缩写,是一种跨域认证的解决方案。 

使用JWT解决什么问题 

传统的登录认证的实现,依赖客户端浏览器的cookie和服务器的session,这种实现登录的方式有很大的局限性。

对于部署在单台服务器的应用来说,使用cookie+session登录认证的方案尚且可以接受。

但如果应用程序需要部署到多台服务器上呢?这里面就涉及到session的共享问题,另外,如果不同的域名想实现单点登录功能呢?显示cookie+session同样无法做到。

而要解决上面提出的问题,可以使用JWT,让应用变成无状态,避免session共享问题,而且可以很容易实现服务器的扩展。

JWT的格式 

一个正确的JWT格式如下所示:JWT字符串由Header,Payload,Signature三个部分组成,中间使用逗号连接

eyJhbGciOiJIUzI1N.eyJleHAizIjoidGVzdC5jb20ifQ.u7tP_cwmX0JS4LOfh5ZoV6t
Header

Header是一个JSON对象,由token类型和加密算法两个部分组成的

{"typ": "JWT",//默认为JWT"alg": "HS256"//支持多种加密算法
}

 将上面的JSON对象使用Base64URL算法转换成字符串,即可得到JWT中的Header部分

Base64 编码是一种将二进制数据编码为 ASCII 字符串的方法。然而,Base64 编码后的字符串中可能包含 +/= 这三个字符,这些字符在 URL 中有特殊含义:

  • + 字符在 URL 中用作分隔符。
  • / 字符在 URL 中用于分隔路径。
  • = 字符在 URL 中用作查询参数的赋值符号。

为了避免这些字符在 URL 中引起问题,JWT 使用了 Base64 URL 安全编码,它是 Base64 编码的一个变种,做了以下修改:

  • 将 + 替换为 -,这在 Base64 URL 编码中是常见的替换字符。
  • 将 / 替换为 _,这同样是为了 URL 安全。
  • 移除 =,这是 Base64 编码中的填充字符,用于确保编码后的字符串长度是 4 的倍数。在 Base64 URL 编码中,这个填充字符被省略,以避免在 URL 中使用。
Payload

JWT的Payload部分与Header一样,也是一个JSON对象,用来存放我们实际需要的数据,JWT标准提供了七个可选的字段,分别为:

除了标准的字段外,我们可以任意定义私有的字段以满足业务需求,如:

{iss:"my",//标准字段jti:"test",//标准字段username:"aaa",//自定义字段"gender":"男","avatar":"https://1.jpg"
}

将上面的JSON对象使用Base64URL算法转换成字符串,即可得到JWT中的Payload部分。

Signature

Signature是JWT的签名,生成方式为:将Header与Payload进行Base64URL算法编码后,用逗号链接,再使用密钥(secretKey)和Header中指的加密方式进行加密,最终生成Signature。

JWT的特点

  1. 最好使用HTTPS协议,防止JWT被盗的可能。

  2. 除了JWT签发时间到期外,没有其他办法让已经生成的JWT失效,除非服务器端换算法。

  3. 在JWT不加密的情况下,JWT不应该存储敏感的信息,如果要存放敏感信息,最好再次加密。

  4. JWT最好设置较短的过期时间,防止被盗用后一直有效,降低损失。

  5. JWT的Payload也可以存储一些业务信息,这样可以减少数据库的查询。

JWT的使用

服务器签发JWT后,发送给客户端,客户端如果是浏览器的话,可以将其存放在cookie或localStorage中,如果是APP的话,则可以存放在sqlite数据库中。

然后每一次接口请求时都带上JWT,而带上来给服务端的方式,也有很多种,比如query、cookie、header或者body,总之就是一切可以带上数据给服务器的方式都可以,但比较规范的做还是通过header Au

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

strcpy函数详解

strcpy函数详解 1.函数简介2.strcpy函数的使用2.1使用方法一2.1使用方法二 3.strcpy在使用过程中的注意事项3.1被复制字符必须以\0结尾3.2目标空间必须能够大于源字符串长度3.3目标空间必须可变 1.函数简介 strcpy函数包含在<string.h>库函数中&#xff0c;是将一个字符…

【C语言】strcmp函数讲解

文章目录 strcmp函数&#xff1a;例1&#xff1a;str2前6个元素和str1一样&#xff0c;多了一个G。例2&#xff1a;第3个字母不同&#xff0c;str2元素也比str1多个G。例3&#xff1a;第3个字母不同&#xff0c;str2元素也比str1少个f。例4&#xff1a;第3个字母不同&#xff0…

Spring 各版本发布时间与区别

版本版本特性Spring Framework 1.01. 所有代码都在一个项目中 2. 支持核心功能IoC、AOP 3. 内置支持Hibernate、iBatis等第三方框架 4. 对第三方技术简单封装。如&#xff1a;JDBC、Mail、事务等 5. 只支持XML配置方式。6.主要通过 XML 配置文件来管理对象和依赖关系&#xff0…

Linux 第三十三章

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…

HCIP【VLAN综合实验】

目录 一、实验拓扑图&#xff1a; 二、实验要求&#xff1a; 三、实验思路&#xff1a; 四、实验步骤&#xff1a; 1、在交换机SW1,SW2,SW3配置VLAN和各个接口对应类型的配置 2、在路由器上面配置DHCP服务 一、实验拓扑图&#xff1a; 二、实验要求&#xff1a; 1、PC1 …

linux Docker在线/离线服务安装并支持centos7和centos8系统

注&#xff1a;以下内容都是经过测试;能在生产环境使用. 一、centos7版本的docker在线安装 1&#xff1a;运行以下命令&#xff0c;下载docker-ce的yum源。 sudo wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo…

做软件测试如何突破月薪20K?

IT行业从事技术岗位&#xff0c;尤其对于测试来说&#xff0c;月薪20K&#xff0c;即便在北上广深这类一线城市薪水也不算低了&#xff0c;可以说对于大部分测试岗位从业者来说&#xff0c;20K都是一个坎儿。 那么&#xff0c;问题来了&#xff0c;做软件测试如何可以达到月薪…

山东大学计算机考研数据分析,初复试占比6:4,复试内容不少得花精力准备!

山东大学&#xff08;ShandongUniversity&#xff09;&#xff0c;简称山大&#xff0c;位于中国山东&#xff0c;是中华人民共和国教育部直属的综合性全国重点大学&#xff0c;是国家“211工程”、“985工程”重点建设院校&#xff0c;入选“111计划”、“珠峰计划”、“卓越工…

Linux网络编程——HTTP协议的理解与运用

目录 前言 一、认识URL 二、认识HTTP样例 三、HTTP的报头内容 1.url 2. Content-Type 3.Method 方法 1.GET方法 2.POST方法 4、状态码 5.cookie和session 前言 我们知道&#xff0c;协议就是一种约定&#xff0c;客户端与服务端统一的用这种约定进行传输数据。我们…

AMEYA360分享:村田与Infineon公司合作开发物联网设备新解决方案

支持更加简单高效的开发活动 株式会社村田制作所与Infineon Technologies AG (总公司位于德国&#xff0c;以下简称“Infineon公司”)展开业务合作&#xff0c;提供面向物联网设备开发人员的STM32 MCU用新平台解决方案。 本解决方案由搭载Infineon公司Wi-Fi™/Bluetooth整合芯片…

【C语言】5.C语言函数(2)

文章目录 7.嵌套调⽤和链式访问7.1 嵌套调⽤7.2 链式访问 8.函数的声明和定义8.1 单个⽂件8.2 多个⽂件8.3 static 和 extern8.3.1 static 修饰局部变量8.3.2 static 修饰全局变量8.3.3 static 修饰函数 7.嵌套调⽤和链式访问 7.1 嵌套调⽤ 嵌套调用就是函数之间的互相调用。…

IDM Internet Download Manager 无法注册激活/注册按钮无法点击

Internet Download Manager 6.43破解版是一款功能强大的下载管理软件,这款软件能够帮助用户轻松高效地下载各种文件类型,无论你是想下载图片,视频,音乐,文档或是软件安装包,这款软件都能够帮你快速,稳定的下载,并且还支持多种线程下载和断点续传,很够很大程度的节省用户的时间和…