JWT 简介
JWT 是 JSON WEB TOKEN 的缩写,它是基于 RFC 7519 标准定义的一种可以安全传输的的 JSON 对象,由于使用了数字签名,所以是可信任和安全的。
JWT 的组成
- JWT token 的格式:header.payload.signature
header 中用于存放签名的生成算法
1
{"alg": "HS512"}
payload 中用于存放用户名、token 的生成时间和过期时间
1
{"sub":"admin","created":1489079981393,"exp":1489684781}
signature 为以 header 和 payload 生成的签名,一旦 header 和 payload 被篡改,验证将失败
1
2// secret 为加密算法的密钥
String signature = HMACSHA512(base64UrlEncode(header) + "." +base64UrlEncode(payload),secret)
JWT 实例
这是一个 JWT 的字符串1
eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImNyZWF0ZWQiOjE1NTY3NzkxMjUzMDksImV4cCI6MTU1NzM4MzkyNX0.d-iki0193X0bBOETf2UN3r3PotNIEAV7mzIxxeI5IxFyzzkOZxS0PGfF_SK6wxCv2K8S0cZjMkv6b5bCqc0VBw
可以在该网站上获得解析结果:https://jwt.io/
JWT 实现认证和授权的原理
用户调用登录接口,登录成功后获取到 JWT 的 token;
之后用户每次调用接口都在 http 的 header 中添加一个叫 Authorization 的头,值为 JWT 的 token;
后台程序通过对 Authorization 头中信息的解码及数字签名校验来获取其中的用户信息,从而实现认证和授权。