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

相关推荐
kali-Myon6 天前
ctfshow-web入门-JWT(web345-web350)
前端·学习·算法·web安全·node.js·web·jwt
NiNg_1_23412 天前
Spring Boot 集成JWT实现Token验证详解
spring boot·后端·jwt·token
春天的菠菜16 天前
【django】Django REST Framework (DRF) 项目中实现 JWT
后端·python·django·jwt
景天科技苑20 天前
【Golang】Gin框架中如何使用JWT来实现登录认证
开发语言·golang·gin·jwt·登录认证·go jwt
nameofworld1 个月前
前端面试题-token的登录流程、JWT
前端·面试·jwt·token·1024程序员节
Z3r4y2 个月前
【JWT安全】portswigger JWT labs 全解
web安全·网络安全·jwt·jwt安全·portswigger
Lsland..2 个月前
JWT令牌技术介绍及使用
springboot·jwt
stark张宇2 个月前
lnmp - 登录技术方案设计与实现
php·jwt
小小工匠2 个月前
Arch - 架构安全性_认证(Authentication)的标准和实现
架构·认证·authentication
小小工匠2 个月前
Arch - 架构安全性_授权(Authorization)
架构·授权·authorization