JWT详解

一、简单介绍

JSON Web Token (JWT)是一个开放行业标准,其RFC标准记录在RFC 7519中,JWT本质上是一个字符串,JWT标准常用于认证(authentication)、授权(Authorization)、安全信息交换(Information Exchange)领域。

二、JWT 构成

JSON Web Token (JWT) 由Header、Payload、Signature三部分组成,这三部分由.(dot)分隔开。所以一个JWT字符串通常如下所示 :

xxxxxx.yyyyyy.zzzzzz

1、Header

header一般包含两部分:token的类型,一般是JWT;签名(sign)的算法,一般是HMAC、SHA256 或者 RSA等,举例如下:

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

该JSON数据会被Base64Url 编码,编码之后的字符串作为Token的第一部分xxxxxx;Base64Url与Base64相关介绍在另一篇文章中。

2、Payload

Token的第二部分是payload,payload包含claims(声明),claim一般包含用户数据和其他额外的数据。claim一般分为三种:registered, public, and private claims。

Registered claims(注册声明)

这部分声明是预定义的声明,这些声明不是必需的,但是建议使用,以提供一组有用的、可互操作的声明。相关的声明如下:

claim 描述
iss (Issuer) Claim,确定签发者的身份,谁签的该token,即该服务器的地址
sub (Subject) Claim, jwt所面向的用户
aud (Audience) Claim

该JSON数据会被Base64Url 编码,编码之后的字符串作为Token的第二部分yyyyyy。

3、signature(签名)

这一部分需要Base64Url 加密后的header和Base64Url 加密后的Payload,并将两者用dot(.)连接起来,组成一个签名前的字符串;然后使用加密算法加上secret或者公私钥加密成签名。该签名将作为Token的第三部分zzzzzz。

在实际应用中,因为Header和Payload会存储很多数据,如果再使用加密算法,生成的数据会更多,这无疑会降低传输效率,所以更常见的用法是先将Header和Payload做数字摘要,然后对数字摘要加密,这样数据量会降低很多。在JWT中有两种签名方式,一种是使用对称加密算法配合secret(盐)进行加密,加解密都会使用到该secret,另一种方式使用非对称加密,通常是服务器使用私钥签名,然后随着请求处理再用公钥验证

三、使用

JWT通常使用在http服务中,用作认证和授权,并且不存储在cookie中,因为使用cookie认证有访问域的限制,而是放在http请求头部,这样的话并没有访问域的限制,并且不需要seesion的参与形式如下:

javascript 复制代码
## Bearer token两者之间是一个空格
Authorization: Bearer token

引用

JWT RFC 7519

相关推荐
易生一世11 分钟前
OpenID Connect的认证与授权详解
oauth·jwt·token·openid·pkce
曲幽2 天前
你的Agent API还在裸奔?从认证到沙箱,我用FastAPI搭了几道防线
python·fastapi·web·security·jwt·oauth2·limit·sandbox·ai agent
小小工匠3 天前
Spring AI RAG - 08 JWT 认证与用户体系设计
spring·jwt
總鑽風6 天前
单点登录sso 微服务加网关gateway
java·微服务·gateway·jwt·单点登录
易生一世8 天前
JWT详解
json·证书·jwt·token·ai skills
庞轩px11 天前
权限系统设计复盘——从RBAC模型到JWT双Token,方法级权限控制的完整实现
鉴权·jwt·rbac·aop·自定义注解·权限系统·双token
深念Y18 天前
Codex 买号登录问题排查与 auth.json 手动配置记录
gpt·jwt·coding·codex·email·refresh_token·access_token
Cry丶21 天前
架构师实战:Spring Authorization Server 落地企业级“无感” SSO(附设计映射与源码级接口剖析)
spring·spring security·oauth2.0·authorization·sso·无感登录
Devin~Y21 天前
大厂Java面试实录:Spring Boot/Cloud + Redis/Kafka + JWT + RAG/Agent(小Y翻车版)
java·spring boot·redis·spring cloud·kafka·spring security·jwt
亿牛云爬虫专家1 个月前
解决 Python 爬虫代理 407 错误:基于 urllib3 更新与爬虫代理的实战指南-2
爬虫·python·爬虫代理·authentication·urllib3·407·base64 编码