JWT 跨域认证

默认分类 · 2021-12-10

认识JWT

JWT全称:JSON Web Token,是一种将JSON对象进行Base64URL编码加密后,在各方进行令牌传输和认证的一种机制

JWT的样式

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

JWT数据由三段构成,每一段数据使用一个点号(.)进行分割,三个数据分别是: HEADER.PAYLOAD.SIGNATURE

JWT的三段构成

Header

header 包含两个部分:令牌的算法 和 令牌类型,如:

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

将以上json对象使用 base64Url 编码,得到HEADER

Payload

payload 是负载,或者加有效载荷,是应用程序之间传输的真正有用的数据,如:

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

将以上json对象使用 base64Url 编码,得到PAYLOAD

Signature

signature 是签名,是对header 和 payload 的签名,可以验证数据是否有被篡改。JWT通常使用的加密算法是HMAC SHA256

Signature 签名算法如下:

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  your-256-bit-secret
)

注意: your-256-bit-secret 是你的密匙字符串,只能是服务器知道,千万不要对外泄露。
经过以上HMACSHA256算法最后得出一串加密后的签名,得到SIGNATURE

最后

将JWT的三个部件使用点号(.)进行拼接,得到: HEADER.PAYLOAD.SIGNATURE
此刻JWT正式生成,可以返回给客户端了,以后请求的时候带着这个JWT token 就行了

其他提示

SIGNATURE 是对 HEADER 和 PAYLOAD两段的加密,主要用于防止数据篡改,客户端传输的SIGNATURE需要和服务器端计算的签名结果进行比对

认证 Authentication
Theme Jasmine by Kent Liao