码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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
    
  • 相关阅读:
    【深度学习的未来:探索无监督学习的潜力】
    SAP如何批量标记生产订单的TECO状态
    IPSec 基础介绍
    解耦电容选型定性与定量分析
    目前最优的非蒸馏、可商用的开源大模型!MIT-IBM 提出鲑鱼模型!
    分布式学习路线指导
    DevOps文化对团队有何影响?
    RS485(一):电路与波形
    Qt 之 全局的QNetworkAccessManager
    Java8函数式编程应用
  • 原文地址:https://blog.csdn.net/weixin_40972073/article/details/126844751
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号