新闻  |   论坛  |   博客  |   在线研讨会
JWT的数据格式详解
电子禅石 | 2024-02-23 10:57:47    阅读:6186   发布文章

1.1.简介

JWT,全称是Json Web Token, 是JSON风格轻量级的授权和身份认证规范,可实现无状态、分布式的Web应用授权;它是分布式服务权限控制的标准解决方案!

官网:https://jwt.io

GitHub上jwt的java客户端:https://github.com/jwtk/jjwt


1.2.数据格式

普通的token:32位UUID

在这里插入图片描述

JWT的token:.

在这里插入图片描述

JWT的token包含三部分数据:


Header:头部,通常头部有两部分信息:

声明类型type,这里是JWT(type=jwt)

加密算法,自定义(rs256/base64/hs256)

我们会对头部进行base64加密(可解密),得到第一部分数据

Payload:载荷,就是有效数据,一般包含下面信息:

用户身份信息-userid,username(注意,这里因为采用base64加密,可解密,

因此不要存放敏感信息)

注册声明:如token的签发时间,过期时间,签发人等

这部分也会采用base64加密,得到第二部分数据

Signature:base64加密,签名,是整个数据的认证信息。

一般根据前两步的数据,再加上服务的的密钥(secret,盐)(不要泄漏,最好周期性更换)

,通过加密算法生成。用于验证整个数据完整和可靠性

一个JWT实际上就是一个字符串,它由三部分组成,头部、载荷与签名。

————————————————

头部(header)

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

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

这就是头部的明文内容,第一部分说明他是一个jwt,第二部分则指出签名算法用的是HS256算法。

然后将这个头部进行BASE64编码,编码后形成头部:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9

载荷(payload)

载荷就是存放有效信息的地方,有效信息包含三个部分:


(1)标准中注册的声明(建议但不强制使用)


iss: jwt签发者

sub: jwt所面向的用户

aud: 接收jwt的一方

exp: jwt的过期时间,这个过期时间必须要大于签发时间

nbf: 定义在什么时间之前,该jwt都是不可用的.

iat: jwt的签发时间

jti: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。

(2)公共的声明


公共的声明可以添加任何的信息,一般添加用户的相关信息或其他业务需要的必要信息. 

但不建议添加敏感信息,因为该部分在客户端可解密.


(3)私有的声明


私有声明是提供者和消费者所共同定义的声明,一般不建议存放敏感信息,

因为base64 是对称解密的,意味着该部分信息可以归类为明文信息。

{
    "sub":"1234567890",
    "name":"tengshe789",
    "admin": true
}

上面就是一个简单的载荷的明文,接下来使用base64加密:

eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9

签证(signature)

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


header (base64后的)

payload (base64后的)

secret

这个部分需要base64加密后的header和base64加密后的payload使用.连接组成的字符串,

然后通过header中声明的加密方式进行加盐secret组合加密,然后就构成了jwt的第 三部分。


结论:


1 jwt的一个有规则的token


2 它有三部分组成:Header.payload.signature,每部分都是通过base64加密而成的


3 jwt每个部分都是可以解密的

————————————————


  版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,

转载请附上原文出处链接和本声明。

                        

原文链接:https://blog.csdn.net/weixin_43814195/article/details/84957153            



                        




*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
属于自己的技术积累分享,成为嵌入式系统研发高手。
推荐文章
最近访客