实践JWT

JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案。有如下特点:

JWT在服务端生成,保存在客户端,可以减轻服务器端管理的复杂性(服务端无状态)。

JWT包含信息,服务端可以解析和利用这些信息,可以选择是否加密。

JWT被签名,只有服务端可以验证其有效性,可以防止JWT被篡改。

JWT有过期时间,可以动态变化,避免被无限使用而存在安全隐患。

结构

JWT由三个部分组成

  • Header(头部)
  • Payload(负载)
  • Signature(签名)
1
Header.Payload.Signature
1
2
3
4
{
  "alg": "HS256",
  "typ": "JWT"
}

使用Base64URL编码

Payload

官方定义了7个标准字段,可以自行增加。

1
2
3
4
5
6
7
iss (issuer):签发人
exp (expiration time):过期时间
sub (subject):主题
aud (audience):受众
nbf (Not Before):生效时间
iat (Issued At):签发时间
jti (JWT ID):编号

使用Base64URL编码

Signature

1
2
3
4
HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)

使用

客户端一般保存到localStorage(推荐)或cookie(不支持跨域)中,通过HTTP请求头

1
Authorization: Bearer <token>

或POST请求的数据体上送给服务器

参考

JSON Web Token 入门教程