首页 > 其他分享 >JWT 结构

JWT 结构

时间:2022-11-29 13:55:07浏览次数:51  
标签:Base64URL JWT 算法 签名 哈希 claims 结构

Json web token的结构

Header 头部    +    Payload 负载    +    Signature 签名
1.JWT-header

header由两部分组成: 令牌类型 + 散列算法

JWT头部分是一个描述JWT元数据的JSON对象,通常如下所示。

{
"alg": "HS256",
"typ": "JWT"
}
//经过base64编码,形成JWT的第一部分。
2.有效载荷payload

有效载荷部分,是JWT的主体内容部分,也是一个JSON对象,包含需要传递的数据。

JWT的第二部分是payload,其中包含claims。claims是关于实体(常用的是用户信息)和其他数据的声明

claims有三种类型: registered, public, and private claims。

Registered claims: 这些是一组预定义的claims,非强制性的,但是推荐使用,iss(发行人), exp(到期时间),sub(主题), aud(观众)等;
Public claims: 自定义claims,注意不要和JWT注册表中属性冲突,这里可以查看JWT注册表;
Private claims:这些是自定义的claims,用于在同意使用这些claims的各方之间共享信息,它们既不是Registered claims,也不是Public claims;
{
  "sub": "1234567890",
  "name": "Tom",
  "admin": true
}
//JSON对象也使用Base64 URL算法转换为字符串保存。
3.签名哈希

签名哈希部分是对上面两部分数据签名,通过指定的算法生成哈希,以确保数据不会被篡改。

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)

在计算出签名哈希后,JWT头,有效载荷和签名哈希的三个部分组合成一个字符串,每个部分用"."分隔,就构成整个JWT对象。

Base64URL算法

JWT头和有效载荷序列化的算法都用到了Base64URL。该算法和常见Base64算法类似,稍有差别。

作为令牌的JWT可以放在URL中(例如api.example/?token=xxx)。 Base64中用的三个字符是"+","/“和”=",由于在URL中有特殊含义,因此Base64URL中对他们做了替换:"=“去掉,”+“用”-“替换,”/“用”_"替换,这就是Base64URL算法。

Reference

https://blog.csdn.net/weixin_45393094/article/details/106523166

标签:Base64URL,JWT,算法,签名,哈希,claims,结构
From: https://www.cnblogs.com/NetUSA/p/16935209.html

相关文章

  • 7.3 统计在线时长——7.3.2 结构
    ......
  • 数据结构(1) pair和map使用
         #include<iostream>#include<thread>#include<map>#include<algorithm>#include<vector>#ifdeflniux#include<unistd.h>//usleep(100......
  • 【剑指Offer】数据结构
    文章目录​​励志​​​​一、剑指Offer05.替换空格​​​​题:​​​​解:​​​​二、剑指Offer06.从尾到头打印链表​​​​题:​​​​解:​​​​三、剑指Offer09.......
  • IntelliJ idea下的项目结构
    IntelliJIDEA的project和module是啥关系?使用基于IntelliJ的IDE,如phpstorm、androidstudio都会对 project 和 module 的关系比较糊涂,简单的概括如下:IntelliJ系......
  • Java主类结构
    Java主类Java程序的基本组成单元是类,类体中又包括属性与方法两个部分每一个应用程序都必须包含一个main()方法,含有main()方法的类称为主类代码中的所有标点符号都是英文字......
  • PTA 21级数据结构与算法实验8—排序
    目录7-1统计工龄7-2寻找大富翁7-3点赞狂魔7-4插入排序还是归并排序7-5插入排序还是堆排序7-6逆序对7-7堆排序7-8石子合并7-9第k小7-10快速排序的过程7-1统计工......
  • C语言结构体对齐
    结构对齐规则结构体(struct)的数据成员,第一个数据成员存放的地址为结构体变量偏移量(offset)为0的地址处。结构体成员自身对齐时,存放的地址为有效对齐值=min{自身对......
  • go源码学习(一):数据结构-数组
    数组是相同类型元素的集合,在内存中对应一块连续的内存空间。数组类型是通过存储的元素类型以及能够存储的大小两个维度来决定的,一旦声明之后大小就不可更改。初始化go语......
  • 【779】R语言数据结构
    1.向量向量从数据结构上看就是一个线性表,可以看成一个数组。c()是一个创造向量的函数。R语言中的"下标"不代表偏移量,而代表第几个,也就是说是从1开始的!seq......
  • Java实现递归查询树结构
        我们在实际开发中,肯定会用到树结构,如部门树、菜单树等等。Java后台利用递归思路进行构建树形结构数据,返回给前端,能以下拉菜单等形式进行展示。今天,咱们就来说......