疯狂编程网

  • 首页
  • 后端
    • GOLANG
    • PHP
  • 前端
  • 客户端
  • 服务器
  • AIGC
  • 开发工具
  • 代码人生
  • 关于本站
    • 联系我们
    • 免责声明
  1. 首页
  2. 服务器
  3. 正文

JWT简介

2023年5月16日 1168点热度 0人点赞 0条评论

JWT的全称是Json Web Token,是一种基于JSON的、用于在网络上声明某种主张的令牌(token)规范。

JWT由三部分组成:header、payload、signature,各部分通过 ‘ . ’ 连接。

例如:XXXX.YYYY.ZZZZ

1、HEAD

头部是一个JSON对象,存储描述数据类型(JWT)和签名算法(HSA256、RSA256),通过Base64UrlEncode编码后生成head 。

编码:eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9


解码:
{
"alg": "RS256",
"typ": "JWT"
}

 

2、PAYLOAD
负载存放一些传输的有效声明,可以使用官方提供的声明,也可以自定义声明。同样通过Base64UrlEncode编码后生成payload。声明可以分为三种类型:

Registered claims:
官方预定义的、非强制性的但是推荐使用的、有助于交互的声明(注意使用这些声明只能是三个字符)。

名称 作用
iss (issuer) 签发人
sub (subject) 主题
aud (audience) 受众
exp (expiration time) 过期时间
nbf (Not Before) 生效时间
iat (Issued At) 签发时间
jti (JWT ID) 编号

Public claims:
保留给JWT的使用者自定义。但是需要注意避免使用IANA JSON Web Token Registry中定义的关键字。

Private claims:
保留给JWT的使用者自定义,用来传送传输双方约定好的消息

编码:
eyJhdWQiOiLopb_pl6jpmL_mtaoiLCJkYXRhIjoiXCLopb_pl6jpmL_mtapcIiIsImlzcyI6IkhBTkdIVUFfQURNSU4iLCJleHAiOjE2MjIzNjA4NDEsImlhdCI6MTYyMjM2MDg0MX0

解码:
{
"aud": "西门阿浪",
"data": "\"西门阿浪\"",
"iss": "HANGHUA_ADMIN",
"exp": 1622360841,
"iat": 1622360841
}

3、SIGNATURE

数据签名是JWT的核心部分,构成较为复杂,且无法被反编码。

HS256加密:
signature = HMACSHA256( base64UrlEncode(header) + "." +base64UrlEncode(payload), secret );

RS256加密:
signature = RSASHA256(base64UrlEncode(header) + "." +base64UrlEncode(payload), publicKey, privateKey)

 

signature可以选择对称加密算法或者非对称加密算法,常用的就是HS256、RS256。

  • 对称加密: 加密方和解密方利用同一个秘钥对数据进行加密和解密。
  • 非对称加密: 加密方用私钥加密,并把公钥告诉解密方用于解密

4、JWT执行逻辑

 

标签: jwt
最后更新:2023年5月16日

大明

靠写代码养家的开发者。

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

COPYRIGHT © 2023 疯狂编程网. ALL RIGHTS RESERVED.

京ICP备2022013580号-1