![affc1b1a4aa0c035bde8fdc94d4af598.png](https://img-blog.csdnimg.cn/img_convert/affc1b1a4aa0c035bde8fdc94d4af598.png)
简介
Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。
JWT组成部分
JWT 的三个部分依次如下。
- Header(头部)
- Payload(负载)
- Signature(签名)
Header.Payload.Signature
Header
Header 部分是一个 JSON 对象,描述 JWT 的元数据。
{
"alg":
"HS256",
"typ":
"JWT"
}
alg属性表示签名的算法(algorithm),默认是 HMAC SHA256(写成 HS256);typ属性表示这个令牌(token)的类型(type),JWT 令牌统一写为JWT。
Payload
Payload 部分也是一个 JSON 对象,用来存放实际需要传递的数据。JWT 规定了7个官方字段,供选用。
iss (issuer):签发人
exp (expiration time):过期时间
sub
(subject):主题
aud (audience):受众
nbf (Not
Before):生效时间
iat (Issued
At):签发时间
jti (JWT ID):编号
除了官方字段,你还可以在这个部分定义私有字段。
Signature
Signature 部分是对前两部分的签名,防止数据篡改。
HMACSHA256(
base64UrlEncode(header)
+
"."
+
base64UrlEncode(payload),
secre
JWT 的使用方式
客户端收到服务器返回的 JWT,可以储存在 Cookie 里面,也可以储存在 localStorage。
此后,客户端每次与服务器通信,都要带上这个 JWT。你可以把它放在 Cookie 里面自动发送,但是这样不能跨域,所以更好的做法是放在 HTTP 请求的头信息Authorization字段里面。