什么是JWT
JWT是一种用于设备间数据传输的开放性标准的简洁独立的JSON对象凭证。由于使用数字说明,
所以这个凭证是验证可信的。JWT的签名采用的是HMAC哈希值或者RSA公私钥。
JWT的组成(明文)
3部分组成,分别Header,Payload和signature之间用.分隔并base64编码后反给用户。编码前格式大致'{"type":"JWT",...}.{"sub":"主题",...}.ABCDEFfsa!...'。
.Header参数
1 | { |
| 参数 | 必有 | 说明 |
|---|---|---|
| typ | 是 | 令牌类型 |
| alt | 是 | 算法类型 |
| jti | 否 | JWT的编号也可放入payload |
.payload参数(明文)
1 | { |
| 参数 | 必有 | 说明 |
|---|---|---|
| iss | 否 | 【issuer】发布者的url地址 |
| sub | 否 | 【subject】该JWT所面向的用户,用于处理特定应用,不是常用的字段 |
| aud | 否 | 【audience】接受者的url地址 |
| exp | 否 | 【expiration】 该jwt销毁的时间;unix时间戳 |
| nbf | 否 | 【not before】 该jwt的使用时间不能早于该时间;unix时间戳 |
| iat | 否 | 【issued at】 该jwt的发布时间;unix 时间戳 |
| jti | 否 | 【JWT ID】 该jwt的唯一ID编号 |
payload 的内容根据情况调整, 以上是官方的推荐参数.
.signature
signture是用于验证token是否合法,没有被篡改的验证依据的字串。JWT的生成算法有3种:
.对称加密 HMAC 【哈希消息验证码】
HS256/HS384/HS512
. 非对称加密 RSASSA【RSA签名算法】 和 ECDSA【椭圆曲线数据签名算法】
RS256/RS384/RS512
ES256/ES384/ES512
以下是采用HMAC算法的PHP JWT封装类
1 |
|