JWT - 简介

220 阅读2分钟

这是我参与8月更文挑战的第11天,活动详情查看:8月更文挑战

介绍

JSON Web Token (JWT) 是一个开放标准 ( RFC 7519 ),它定义了一种紧凑且自包含的方式,用于在各方之间作为 JSON 对象安全地传输信息。该信息可以被验证和信任,因为它是经过数字签名的。JWT 可以使用HMAC算法或使用RSAECDSA的公钥/私钥对进行签名

虽然 JWT 可以加密并在各方之间提供保密,但我们将重点关注签名 令牌(Token)。签名令牌可以验证其中包含的声明的完整性,而加密令牌则对其他方隐藏这些声明。当使用公钥/私钥对对令牌进行签名时,签名还证明只有持有私钥的一方才是对其进行签名的一方。

特点

紧凑

由于其较小的体积,JWT可以通过URLPOST参数或HTTP头部参数进行传递,体积小也意味着其传输速度会相当快。

独立

有效负载包含了所需要的关于用户的所有信息,避免了多次查询数据库的需要。

使用场景

授权

这是使用 JWT 最常见的场景。用户登录后,每个后续请求都将包含 JWT,允许用户访问该令牌允许的路由、服务和资源。单点登录是当今广泛使用 JWT 的一项功能,因为它的开销很小,并且能够轻松跨不同域使用。

信息交换

JWT 是一种在各方之间安全传输信息的好方法。因为 JWT 可以被签名——例如,使用公钥/私钥对——你可以确定发件人就是他们所说的那样。此外,由于使用标头和有效负载计算签名,因此您还可以验证内容是否未被篡改。

JWT结构

在其紧凑形式中,JWT由用点 ( .)分隔的三个部分组成,它们是:

  1. Header(头部)
  2. Payload(载荷)
  3. Signature(签名)

因此,JWT通常看起来如下。

xxxxx.yyyyy.zzzzz

示例:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IuS4h-aBtueahOayq-eZvSJ9.PAxe7KUicknHL0H2hYJxm3V_UsHXa2GcHsgCJ40S8Fg

解码:

//Header
{
  "alg": "HS256",
  "typ": "JWT"
}
//Payload
{
  "sub": "1234567890",
  "name": "万恶的沫白"
}
//Signature
HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  123456 //密钥
) 

JWT验证

官网有提供验证工具