JWT在线解码网址和结构介绍

  • Post author:
  • Post category:其他




JWT简介



JWT 概念

JWT 全称为

JSON Web Token

是目前最流行的跨域认证解决方案,

官网地址链接



JWT 优点

基于token的认证方式相比传统的session认证方式能够解决移动端和分布式开发中跨域问题,具有下列优点:

  1. 减少服务器压力:服务端不需要存储session信息,token可以携带登录用户服务器所需信息
  2. 支持跨域访问:将token放到请求头中,就不需要cookie存储信息,所以跨域后不会因为cookie是无法跨域而导致信息丢失
  3. 更适用于移动端:当客户端是非浏览器平台时或者cookie被禁止时,采用token认证方式会简单很多
  4. 更适用CDN:可以通过内容分发网络请求服务端的所有资料
  5. 无需考虑CSRF:由于不再依赖cookie,所以采用token认证方式不会发生CSRF,所以也就无需考虑CSRF的防御



JWT 在线解码工具

这个解码工具只能解析

Base64

编码后的

header

以及

Payload

部分,对于加密的

Signature

部分是无法解密的只有服务器端使用

secretKey

进行解密才能知道具体的内容。


JWT在线解码工具入口



JWT 结构解析

JWT由3部分组成:标头(

Header

),有效载荷(

Payload

)和签名(

Signature

)。在传输的时候,会将JWT的三个部分分别进行

Base64

编码后,拼接成最终传输的字符串,也就是我们的Json Web Token。

JWTString=Base64(Header).Base64(Payload).HMACSHA256(base64UrlEncode(header)+"."+base64UrlEncode(payload),secret)


header



payload

可以直接利用

base64

解码出原文,从

header

中获取哈希签名的算法,从

payload

中获取有效数据


signature

由于使用了不可逆的加密算法,无法解码出原文,它的作用是校验token有没有被篡改。服务端获取header中的加密算法之后,利用该算法加上

secretKey



header



payload

进行加密,比对加密后的数据和客户端发送过来的是否一致,注意其中

secretKey

只能保存在服务端,以保证数据的安全性。

JWT三部分



1.Header

JWT头是一个描述JWT元数据的JSON对象,alg属性表示签名使用的算法,默认为HMAC SHA256(写为HS256);typ属性表示令牌的类型,JWT令牌统一写为JWT。最后,使用Base64 URL算法将上述JSON对象转换为字符串保存

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

Header



2.Payload

有效载荷部分,

JWT

主体内容部分,是一个包含需要传递数据的

JSON

对象。 其中有七个默认字段供选择。

{
	"iss":发行人
	"exp":到期时间
	"sub":主题
	"aud":用户
	"nbf":在此之前不可用
	"iat":发布时间
	"jti":JWT ID用于标识该JWT
}

以上默认字段并不要求强制使用。我们还可以自定义私有字段,一般会把包含用户信息的非保密数据放到

payload

中。

{
  "admin_id": "93b5909c927c235ed5f9ee655e0e01abf988f5ebaeff4788542fde9573d79f3b4556c462b332493d2d34c7421dca804bf407dcf51815671cf8ce832165296441e3ca9b42ddc00a7e4914bbc536e1cec84afa6c61785c27b597b492de60baff8f",
  "merchant_id": "93b5909c927c235ed5f9ee655e0e01abf988f5ebaeff4788542fde9573d79f3b4556c462b332493d2d34c7421dca804bf407dcf51815671cf8ce832165296441e3ca9b42ddc00a7e4914bbc536e1cec84afa6c61785c27b597b492de60baff8f"
}

注意:默认情况下

JWT

是未加密的,只是采用

base64

算法,拿到JWT字符串后可以转换回原本的

JSON

数据,任何人都可以解读其内容,因此不要构建隐私信息字段,比如用户的密码一定不能保存到

JWT

中,以防止信息泄露。

JWT

只是适合在网络中传输一些非敏感的信息

载荷



3.Signature

签名哈希部分是对上面两部分数据签名,需要使用

base64

编码后的

header



payload

数据,通过指定的算法生成哈希,以确保数据不会被篡改。首先,需要指定一个密钥(

secret

)。该密码仅仅为保存在服务器中,并且不能向用户公开。然后,使用

header

中指定的签名算法(默认情况下为

HMAC SHA256

)根据以下公式生成签名

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



写在最后


JWT

作为现在主流的验证方式,在各种语言中都有着对应使用方法,还是十分值得研究学习的。



版权声明:本文为qq_43233225原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。