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.mzph.cn/pingmian/12781.shtml

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

相关文章

✅什么是时间轮?

一、问题解析 时间轮算法(Time Wheel Algorithm)是一种用于处理定时任务和调度的常见算法。 时间轮算法主要需要定义一个时间轮盘,在一个时间轮盘中划分出多个槽位,每个槽位表示一个时间段,这个段可以是秒级、分钟级、…

数据结构(十五)----排序算法(2)

目录 一.选择排序 1.简单选择排序 2.堆排序 •建立大根堆 •基于大根堆进行排序 堆排序算法效率: 堆排序算法稳定性: 3.堆的插入和删除 •在堆中插入新元素 •在堆中删除元素 二.归并排序 归并排序算法效率: 归并排序算法的稳定…

Reverst:基于QUIC协议和HTTP3的反向隧道工具

关于Reverst Reverst是一款功能强大的反向隧道工具,Reverst由一个具备负载均衡功能的反向隧道服务器和一个服务器-客户端库组成,该工具使用Go语言开发,基于QUIC和HTTP/3实现其功能。 关于QUIC和HTTP/3 QUIC,即快速UDP互联网连接…

队列的实现与OJ题目解析

"不是你变优秀了, 那个人就会喜欢你." 文章索引 前言1. 什么是队列2. 队列的实现3. OJ题目解析4. 总结 前言 感情可以培养是个伪命题. 如果有足够多的时间和爱, 就可以让另一个人爱上你的话, 那谁和谁都可以相爱了. 爱情之所以会让人死去活来, 是因为, 答案都写在了…

photoshop(PS)有什么快速提升工作效率的功能?或者实用功能?这里告诉你7条!

1:文件太多,不方便马上找到需要插入元素(元素放入PS会发现,位置不知道在哪里),点击需要选中或者搭配的元素,ctrlV就可以快速插入目标/图层元素的位置了! 点击当前元素,选中&#xf…

Linux备份---异地

参考文档:Linux环境实现mysql所在服务器定时同步数据文件到备份服务器(异地容灾备份场景)_mysql异地备份-CSDN博客 通过SSH进行连接: 应用服务器: 通过ssh-keygen -t rsay建立ssh通信的密钥 密钥建立后,…

边缘计算安全有多重要

德迅云安全研究发现边缘安全是对存储或处理在网络边缘的数据的保护。边缘可以用不同的方式定义,但一般来说,它包括企业直接控制之外的任何设备或位置。这可能包括传感器、连接物联网的设备和移动设备。 边缘计算正在彻底改变商业运作方式。这引发了对边缘…

SpringBoot 使用logback(多环境配置)

Logback是由log4j创始人设计的又一个开源日志组件。可用于项目日志功能。官网地址 第1步&#xff1a;添加坐标依赖 <!--logback--> <dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version…

Python 提取PDF表格数据并保存到TXT文本或Excel文件

目录 安装Python库 Python提取PDF表格数据并保存到文本文档 Python提取PDF表格数据并保存到Excel文档 PDF文件常用于存储和共享各种类型的文档&#xff0c;这些文档可能包括大量的数据表格。通过提取这些PDF表格数据&#xff0c;我们可以将其导入到Excel、数据库或统计软件等…

技术架构

一、单机架构 简介&#xff1a;应用服务和数据库服务共用一台服务器 出现原因:出现在互联网早期&#xff0c;访问量比较小&#xff0c;单机足以满足 架构工作原理&#xff1a;以电商为例&#xff0c;可以看到通过应用&#xff08;划分了多个模块&#xff09;和数据库在单个服…

视频智能检测AI智能分析网关V4告警消息推送:公众号消息推送的配置步骤介绍

TSINGSEE青犀智能分析网关V4属于高性能、低功耗的软硬一体AI边缘计算硬件设备&#xff0c;目前拥有3种型号&#xff08;8路/16路/32路&#xff09;&#xff0c;支持Caffe/DarkNet/TensorFlow/PyTorch/MXNet/ONNX/PaddlePaddle等主流深度学习框架。硬件内部署了近40种AI算法模型…

继承,多态,封装以及对象的打印

前言&#xff1a; 我们都知道Java是一种面向对象的编程语言&#xff0c;面向对象语言的三大特性就是继承&#xff0c;多态&#xff0c;封装&#xff0c;而这些特性正好的Java基础的一个主体内容。在学到这之前&#xff0c;我们肯定已经学习过了类和对象&#xff0c;所以这部分…

光学镜片镀膜上下料设备

在现代化工业生产的浪潮中&#xff0c;智能化、自动化已成为提升生产效率、降低成本的关键所在。特别是在精密制造领域&#xff0c;对于设备的高精度、高效率要求更是严苛。今天向大家推荐一款引领行业潮流的智能设备——富唯智能镀膜上下料设备。 产品介绍 实现功能 单面镀膜…

NGINX SPRING HTTPS证书

服务器&#xff1a;xxx.xxx.xxx.56 客户端器&#xff1a;xxx.xxx.xxx.94##生成服务器证书和密钥容器 keytool -genkey -alias tas-server -keypass 250250 -keyalg RSA -keysize 2048 -validity 3650 -keystore D:\https证书\tas-server.jks -storepass 250250 -dname "C…

低成本创业分享,一个不用自己囤货、进货、直播的项目|抖音小店

大家好&#xff0c;我是喷火龙 在抖音上面开店&#xff0c;不仅可以卖自己的商品&#xff0c;还可以卖别人的商品赚差价&#xff0c; 并且不需要你囤货、进货、直播、剪视频&#xff0c;也不需要有粉丝。 这个项目就是抖音小店无货源。 很多朋友对抖音小店无货源模式的玩法…

tensorrtx-yolov5-v6.0部署在windows系统

前言&#xff1a;最近几天一直在搞这个东西&#xff0c;现在跑通了&#xff0c;为了以后自己看和帮助他人&#xff0c;就记录一下。虽然是跑通了但是觉得怪怪的&#xff0c;感觉不是自己想要的效果&#xff0c;另外这个只能检测图片&#xff0c;不能摄像头实时监测(我暂时没找到…

springsecurity项目快速搭建

自定义security的搭建 package com.sangeng.config;import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;Co…

智能文档处理:解析文档场景下多模态大模型的应用与研究前沿

解析文档场景下多模态大模型的应用与研究前沿 一、TextIn 文档解析技术1. 现有大模型文档解析问题2. 文档解析技术背景3. TextIn 文档解析技术架构4. 版面分析关键技术 Layout-engine 二、TextIn 文本向量化技术三、TextIn.com Text Intelligence 一、TextIn 文档解析技术 hell…

【driver6】debugfs,性能优化,

文章目录 1.内核调试手段&#xff1a;debugfs.h中api建立目录/sys/kernel/debug2.性能优化&#xff1a;裸磁盘无法使用&#xff0c;一般都刷文件系统。驱动加上要考虑磁盘io&#xff0c;内存占用&#xff0c;cpu使用情况3.Valgrind内存泄漏排查案例&#xff1a;4.cpu瓶颈&#…

英语学习笔记10——Look at ...

Look at … 看…… 词汇 Vocabulary fat adj. 胖的&#xff0c;丰富的 n. 脂肪 例句&#xff1a;他是个胖男孩。    He is a fat boy. 搭配&#xff1a;fat cat 有钱人&#xff0c;土豪 woman n. 女人 girl n. 女孩 madam n. 女士 man n. 男人 boy n. 男孩 sir n. 先生 …