Json Web Token

JWT(Json Web Token)是一种用于身份验证和信息交换的开放标准。它由Header、Payload和Signature三部分组成,采用紧凑、URL安全的格式。JWT可以实现无状态认证,支持跨域访问,并且数据量小,传输速度快。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JWT是什么

JWT:Json Web Token,本质为一个字符串。可以应用于:

  1. 授权:登陆验证。将服务端响应的JWT Token携带在在每个请求的Authorization进行登陆验证
  2. 信息交换:利用公钥、密钥对,可以进行签名,将信息数据在多方之间安全的进行数据传递。且基于Header与Payload部分进行签名计算,还可以验证内容是否被篡改

组成部分

Header:描述JWT元数据的Json对象。
  1. alg表示签名使用的算法,默认为HMAC SHA256(写为HS256)
  2. typ表示令牌的类型,JWT令牌则写为JWT
{
    "alg": "HS256",
    "typ": "JWT"
}
Payload:有效载荷,JWT的主体部分。Json结构,表明需要传递的数据。

七个默认可选字段:

  • iss(issuer):发行人

  • iat(issued at):发布时间

  • exp(expiration):到期时间

  • sub(subject):主题

  • aud(audience):用户

  • nbf(not before):在此之前不可用

  • jti:JWT ID用于标识JWT Token

除此之外,可指定自定义字段,一般会把用户的非敏感数据放入到Payload中,例:

{
  "sub" : "test",
  "name": "CQQ",
  "job" : "developer"
}
Signature:对Header & Payload部分经过Base64处理后的数据,通过Header中指定算法生成签名数据,用于确保数据不会被篡改。

如何确定数据没有被篡改:Base64解开Header & Payload的明文数据,JWTString中其余的数据则为签名数据,服务器会存储一个不公开的密钥,通过该密钥进行:

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

将结果与刚刚得到的签名数据进行一致性对比。

完整的JWT String

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

JWT的类别

  1. nonsecure JWT:不签名,不安全
  2. JWS:
  3. JWE:Payload部分加密
类别全称说明
JWSJSON Web Signature structure消息会被签名,payload只是简单的base64加密。可防止篡改,但不防止被查看。
JWEJSON Web Encryption structure消息会被签名 & 加密,没有钥匙无法解密消息。可防止篡改、查看。

优势

JWT基于Token认证方式对比传统的Session认证方式:

  1. 跨域:因为不应用Cookie,更好的支持跨域访问
  2. 简洁:JWT Token数据量小,故传输速度也快
  3. 适用于多端:对于不支持Cookie机制的客户端,基于请求头携带的Token的机制可以更好的支持
  4. 无状态:相比传统的Session机制,不需要在服务器存储用户信息及状态。这些数据都在客户端进行存储,节省服务器资源

实际应用

Java版本的基于JWT的登录验证:gitee

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值