什么是JWT

JWT是什么

JWT全称(Json web token),JWT是一种标准,用于以JSON对象的形式在各方之间安全的传输信息。

JWT的组成部分

  • Header
  • Payload
  • Signature

JWT通常看起来像这样:
xxxxx.yyyyy.zzzzz

接下来让我们对其三个组成部分进行拆分讲解。

header由两部分组成,第一部分是token的类型(JWT),第二部分是加密算法的名称(如SHA256、RSA和HMAC)。

例如:

json 复制代码
{
  "alg": "HS256",
  "typ": "JWT"
}

这段JSON将被使用Base64Url编码,然后作为JWT的一部分。

999999999999999999999999999999999999999999999999999999999999

Payload

JWT token的第二部分是包含了声明的负载。声明是陈述某个实体(通常式用户),及其附加数据的陈述99。声明的类型由三种:注册声明、公共声明和私有声明:

  • 注册声明(registered claims):这是一组预定义的声明,虽然不是强制性的,但建议使用,以提供一组有用且可互操作的声明。其中一些声明包括:iss(签发者)、exp(过期时间)、sub(主题)、aud(受众)等。

  • 公共声明(public claims):这些声明可以根据使用 JWT 的需求自由定义。为了避免冲突,它们应该在 IANA JSON Web Token 注册表中定义,或者作为一个包含防冲突命名空间的 URI 来定义。

  • 私有声明(private claims):这是为了在同意使用它们的各方之间共享信息而创建的自定义声明,既不是注册声明也不是公共声明

注意,声明名称长度仅为三个字符,因为 JWT 设计为紧凑型格式。

示例:

json 复制代码
{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}

第二部分同样需要进行Base64Url编码。JWT是防篡改的,但是任何人都可以读取。除非加密,否则不要将机密信息放入JWT的有效负载或者标题元素中。

Signature

创建签名部分,需要取编码后的头部,编码后的负载,一个密钥以及头部中指定的算法进行签名。

例如:如果要使用 HMAC SHA256 算法,签名将按照以下方式创建:

复制代码
HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)lo

签名用于验证消息在传输过程中未被篡改,并且,在使用私钥签名的情况下,还可以验证 JWT 发送者的身份是否如其所声称的一样。

综合

jwt最终是以三个点分隔的Base64-URL字符串。l

相关推荐
小云数据库服务专线4 小时前
GaussDB 数据库架构师修炼(十三)安全管理(5)-动态数据脱敏
安全·数据库架构·gaussdb
lingggggaaaa4 小时前
小迪安全v2023学习笔记(六十二讲)—— PHP框架反序列化
笔记·学习·安全·web安全·网络安全·php·反序列化
喂完待续6 小时前
【Tech Arch】Spark为何成为大数据引擎之王
大数据·hadoop·python·数据分析·spark·apache·mapreduce
王者鳜錸7 小时前
PYTHON让繁琐的工作自动化-猜数字游戏
python·游戏·自动化
黑客影儿8 小时前
Kali Linux 环境中的系统配置文件与用户配置文件大全
linux·运维·程序人生·安全·网络安全·系统安全·学习方法
若天明8 小时前
深度学习-计算机视觉-微调 Fine-tune
人工智能·python·深度学习·机器学习·计算机视觉·ai·cnn
倔强青铜三9 小时前
苦练Python第39天:海象操作符 := 的入门、实战与避坑指南
人工智能·python·面试
一百天成为python专家10 小时前
Python循环语句 从入门到精通
开发语言·人工智能·python·opencv·支持向量机·计算机视觉
Sunhen_Qiletian10 小时前
朝花夕拾(五)--------Python 中函数、库及接口的详解
开发语言·python
三年呀10 小时前
标题:移动端安全加固:发散创新,筑牢安全防线引言:随着移动互联网
网络·python·安全