IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Spring Security 之 JWT介绍 -> 正文阅读

[Java知识库]Spring Security 之 JWT介绍

相关文章:

  1. OAuth2的定义和运行流程
  2. Spring Security OAuth实现Gitee快捷登录
  3. Spring Security OAuth实现GitHub快捷登录
  4. Spring Security的过滤器链机制
  5. Spring Security OAuth Client配置加载源码分析
  6. Spring Security内置过滤器详解
  7. 为什么加载了两个OAuth2AuthorizationRequestRedirectFilter分析
  8. Spring Security 自定义授权服务器实践
  9. Spring Security 自定义资源服务器实践
  10. Spring Security 自定义用户信息端点与多种登录方式共存

什么是JWT

Json Web Token 简称JWT,是一个开放的行业标准(RFC 7519),它定义了一种简洁的、自包含的协议格式,用于在通信双方传递JSON对象,传递的信息经过数字签名可以被验证和信任。JWT可以使用HMAC算法或使用RSA的公钥/私钥来签名,防止被篡改。

官网: https://jwt.io
标准:https://tools.ietf.org/html/rfc7519

JWT令牌的优点:

  1. JWT基于JSON,非常方便解析
  2. 可以在令牌中自定义丰富的内容,易扩展
  3. 通过非对称加密算法及数字签名技术,JWT防止篡改,安全性高
  4. 资源服务使用JWT可不依赖认证服务即可完成授权

缺点:

  1. JWT令牌较长,占存储空间比较大

JWT组成

在这里插入图片描述
这是一段JWT,一个JWT就是一个字符串,由三部分组成:头部、载荷、签名

头部(Header)

头部用于描述关于该JWT的最基本的信息,例如其类型(JWT)以及签名所用的算法(如HMAC SHA256或RSA)等,这也可以被表示成一个JSON对象。

{
"alg":"HS256",
"typ":"JWT"
}

typ:类型 alg:签名的算法
再对JSON字符串进行Base64编码,得如下字符串:

ewoiYWxnIjoiSFMyNTYiLAoidHlwIjoiSldUIgp9

负载(Payload)

第二部分是负载,用来存放有效信息,这些有效信息包含三个部分:

  1. 标准中注册的声明
    iss: jwt签发者
    sub:jwt所面向的用户
    aud:接收jwt的一方
    exp:jwt的过期时间,这个过期时间必须要大于签发时间
    nbf:定义在什么时间之前,该jwt都是不可用的
    iat:jwt的签发时间
    jti:jwt的唯一身份标识,主要用来作为一次性token,从而避免重放攻击
  2. 公共的声明
    公共的声明可以添加任何信息,一般添加用户相关信息或其他业务需要的必要信息,但不建议添加敏感信息,因为该部门在客户端可解密
  3. 私有声明
    私有声明是提供者和消费者所共同定义的声明,一般不建议存放敏感信息,因为base64是对标解密的,意味着该部分信息可以归类为明文信息
    这个指的就是自定义的claim,比如:
{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

sub 标准的声明,name自定义的声明(公共的或者私有的)

再base64后得到jwt的第二部分:

eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ

签名(signature)

JWT的第三部分是一个签证信息,这个签证信息由三部分组成:

  1. header(base64后)
  2. payload(base64后)
  3. secret(盐,保密)
    这部分将base64加密后的header、base64加密后的payload使用.连接组成的字符串,然后通过header中声明的加密方式进行加盐secret,然后构成jwt的第三部分。
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

🚫 secret是保存在服务器端的,jwt的签发生成也是在服务器端的,secret就是用来进行jwt签发和jwt验证,所以它就是你服务端的私钥,不能流露出去。

最终将这三部分用.连接成一个完整的字符串,构成最终的JWT

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-09-15 01:51:23  更:2022-09-15 01:53:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:34:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码