jwt(json web token)目录
Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密
一、组成(三部分)
1、头部(header)
两部分组成头部:
声明类型,这里是jwt
声明加密的算法通常直接使用 HMAC SHA256
一般形式如下:
{
'typ': 'JWT',
'alg': 'HS256'
}
2、载荷(payload)
标准的参数声明有7个(建议但不强制使用):
iss: jwt签发者
sub: jwt所面向的用户
aud: 接收jwt的一方
exp: jwt的过期时间,这个过期时间必须要大于签发时间
nbf: 定义在什么时间之前,该jwt都是不可用的.
iat: jwt的签发时间
jti: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。
同时,还可以自己声明参数
3、签证(signature)
HMACSHA256是我们在header中指定的加密算法,对base64UrlEncode(header)、base64UrlEncode(payload)和secret进行加密。用来验证请求发送者的身份和确保JWT中途没有被窜改。
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret
)
二、加密(sign)与解密(verify)
(1)加密(JWTSigner.sign):Signer.sign(payload); //payload的参数
(2)解密(JWTVerifier.verify):Verifier.verify(token); //对该token进行解密