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

相关推荐
Z3r4y4 天前
【JWT安全】portswigger JWT labs 全解
web安全·网络安全·jwt·jwt安全·portswigger
Lsland..10 天前
JWT令牌技术介绍及使用
springboot·jwt
stark张宇19 天前
lnmp - 登录技术方案设计与实现
php·jwt
小小工匠1 个月前
Arch - 架构安全性_认证(Authentication)的标准和实现
架构·认证·authentication
小小工匠1 个月前
Arch - 架构安全性_授权(Authorization)
架构·授权·authorization
missterzy1 个月前
JWT双令牌认证实现无感Token自动续约
jwt
_.Switch2 个月前
Django 后端架构开发:JWT 项目实践与Drf版本控制
数据库·后端·python·中间件·架构·django·jwt
春哥的魔法书2 个月前
JSON Web Token (JWT): 理解与应用
前端·json·状态模式·jwt·token
brief of gali2 个月前
Jdk17 jwt报错 java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter
java·开发语言·springboot·jwt
爱吃香蕉的阿豪2 个月前
c# .net core项目中使用JWT进行权限校验
.netcore·jwt·token·权限校验