外贸用什么平台自建站较好,安徽网站优化好不好,龙湖地产 网站建设,wordpress文章只显示标题#x1f4d1;前言
本文主要是jwt解读文章#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ #x1f3ac;作者简介#xff1a;大家好#xff0c;我是青衿#x1f947; ☁️博客首页#xff1a;CSDN主页放风讲故事 #x1f304;每日一句#xff1a;努力一点#…前言
本文主要是jwt解读文章如果有什么需要改进的地方还请大佬指出⛺️ 作者简介大家好我是青衿 ☁️博客首页CSDN主页放风讲故事 每日一句努力一点优秀一点 目录 文章目录 前言**目录**1、什么是jwt及其用法2. JWT 的数据结构2.1 Header2.2 Payload(负载)2.3 Signature签名 3.基于Token的身份认证与基于服务器的身份认证4.实际开发中的应用 文章末尾 1、什么是jwt及其用法
什么是JWTJWT全称Json Web Token是一种基于json的开发标准是token的一种具体实现方式。本质就是一个字符串它是将用户信息保存到一个Json字符串中然后进行编码后得到一个JWT token并且这个JWT token带有签名信息接收后可以校验是否被篡改所以可以用于在各方之间安全地将信息作为Json对象传输。 JWT官网有一张图描述了JWT的认证过程 2. JWT 的数据结构
JWT 的三个组成部分依次如下
· Header头部
· Payload负载
· Signature签名2.1 Header
Header 部分是一个 JSON 对象描述 JWT 的元数据通常是下面的样子。 头部表明是一个jwt类型的token采取的加密方式是HS256 2.2 Payload(负载)
Payload 部分也是一个 JSON 对象用来存放实际需要传递的数据。JWT 规定了7个官方字段供选用。
iss (issuer)签发人
exp (expiration time)过期时间
sub (subject)主题
aud (audience)受众
nbf (Not Before)生效时间
iat (Issued At)签发时间
jti (JWT ID)编号2.3 Signature签名 签名哈希部分是对上面两部分数据签名需要使用base64编码后的header和payload数据通过指定的算法生成哈希以确保数据不会被篡改。首先需要指定一个密钥secret。该密码仅仅为保存在服务器中并且不能向用户公开。然后使用header中指定的签名算法默认情况下为HMACSHA256根据以下公式生成签名 H M A C S H A 256 ( b a s e 64 U r l E n c o d e ( h e a d e r ) . b a s e 64 U r l E n c o d e ( p a y l o a d ) , s e c r e t ) HMACSHA256(base64UrlEncode(header) “.” base64UrlEncode(payload), secret) 在计算出签名哈希后JWT头有效载荷和签名哈希的三个部分组合成一个字符串每个部分用.分隔就构成整个JWT对象 3.基于Token的身份认证与基于服务器的身份认证 在讨论基于Token的身份认证是如何工作的以及它的好处之前我们先来看一下以前我们是怎么做的 HTTP协议是无状态的也就是说如果我们已经认证了一个用户那么他下一次请求的时候服务器不知道我是谁我们必须再次认证 传统的做法是将已经认证过的用户信息存储在服务器上比如Session。用户下次请求的时候带着SessionID然后服务器以此检查用户是否认证过。 使用 JWT 的优势 你不需要向传统的 Web 应用那样将用户状态保存于 Session 中。 4.实际开发中的应用 在实际的SpringBoot项目中一般我们可以用如下流程做登录 1.在登录验证通过后给用户生成一个对应的随机token(注意这个token不是指jwt可以用uuid等算法生成)然后将这个token作为key的一部分用户信息作为value存入Redis并设置过期时间这个过期时间就是登录失效的时间 2.将第1步中生成的随机token作为JWT的payload生成JWT字符串返回给前端 3.前端之后每次请求都在请求头中的Authorization字段中携带JWT字符串 4.后端定义一个拦截器每次收到前端请求时都先从请求头中的Authorization字段中取出JWT字符串并进行验证验证通过后解析出payload中的随机token然后再用这个随机token得到key从Redis中获取用户信息如果能获取到就说明用户已经登录 文章末尾