JWT 简单了解一下
JWT
的全称是 JSON Web Token
官方网站:https://jwt.io/
JWT 解决的问题
- 可以为多种终端提供统一的令牌格式
- 跨域认证的问题。(传统的web或者其他开发使用session,都会面临数据同步和持久化的问题)
JWT 的组成
从外观上来看,jwt就是一个很长的字符串,中间用两个点(.
)分隔成三个部分,这三个部分分别是 Header(头部) 、 Payload(负载)、 Signature(签名)
1 | # 写成一行就是这样的排列 |
Header(头部)
Header
部分是一个 JSON
对象,描述 JWT
的元数据,比如其类型以及签名所用的算法等,可以表示为一个 json
对象
1 | { |
alg
属性表示签名的算法(algorithm
),默认是 HMAC SHA256(写成 HS256)
typ
属性表示这个令牌(token
)的类型(type
),JWT
令牌统一写为 JWT
将上面的 JSON 对象使用 Base64URL
算法转成字符串
Payload(负载)
Payload 部分有7个官方规定的字段(不是必须的)
1 | iss (issuer):签发人 |
还可以自定义字段,比如官网的例子
1 | { |
将上面的 JSON 对象使用 Base64URL
算法转成字符串
Signature(签名)
Signature 部分是对前两部分的签名,防止数据篡改。指定一个密钥(secret),然后,使用 Header 里面指定的签名算法(默认是 HMAC SHA256)按照下面的公式计算出签名
1 | HMACSHA256( |
把 Header
、Payload
、Signature
三个部分拼成一个字符串,每个部分之间用”点”(.
)分隔,就可以返回给用户。