JSON Web Token(JWT) 简介

JSON Web Token(JWT) 简介

1 什么是 JWT?

JWT(JSON Web Token)是认证解决方案,下面介绍它的原理和用法.

2 JWT 的结构

JWT 的结构如下

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

JWT的具体表现是一个长字符串,中间用点(.)分隔成三个部分

这三部分分别指的是

Header(头部)
Payload(负载)
Signature(签名)

即:

Header.Payload.Signature

2.1 Header

{
  "alg": "HS256",
  "typ": "JWT"
}

alg属性表示签名的算法,默认是 HMAC SHA256(写成 HS256);typ属性表示这个令牌(token)的类型(type),一般是这两个属性,当然也可以加上其他自定义的属性。

将上面的 JSON 对象使用 Base64URL 算法编码就构成了 JWT 的 Header。

2.2 Payload

Payload 用来存放实际需要传递的数据。JWT 规定了下面7个可选字段(建议但不强制使用)。

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

除了官方可选字段,你可以在这个部分定义私有字段,如下:

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

同样上面的 JSON 对象使用 Base64URL 算法编码就构成了 JWT 的 Payload。

2.3 Signature

Signature 部分是对前两部分的签名,防止数据篡改。

首先,需要指定一个密钥(secret)然后,使用 Header 里面指定的签名算法(默认是 HMAC SHA256),按照下面的公式产生签名。

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

secret 要保存在服务端,JWT的签发和验证都需要用这个 secret,不能泄露

同样使用 Base64URL 算法编码就构成了 signature

最后,把 Header、Payload、Signature 三个部分拼成一个字符串,每个部分之间用"点"(.)分隔,就组成了完整的 JWT

3 使用方式

服务端返回 JWT 给客户端,此后,客户端每次与服务器通信,都要带上这个 JWT。可以放在 HTTP 请求的头信息Authorization字段里面。

Authorization: Bearer <token>

或放在 POST 请求的数据体里面

参考链接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章