原文链接: JSON Web Token 入门教程 By 阮一峰
概念
JSON Web Token(JWT)是目前最流行的跨域认证解决方案。
跨域认证
问题:
- 扩展性不好(可能需要session数据共享)
JWT
原理
- 生成JSON对象返回给用户
- 服务器靠这个对象认定用户身份
- 服务器不保存session数据 ==> 服务器编程无状态
数据结构
三个部分(用.
分隔:
- Header(头部)
- Payload(负载)
- Signature(签名)
Header
- 是JSON对象
- 描述JWT的元数据
alg
签名的算法typ
令牌的类型
- Base64URL算法转成字符串
Payload
- 是JSON对象
- 存放实际需要传递的数据
iss
签发人exp
过期时间sub
主题aud
受众nbf
生效时间iat
签发时间jti
编号- 也可以自定义
- 默认不加密
- Base64URL算法转成字符串
Signature
对前两部分的签名
指定一个秘钥
使用方法
- 服务器返回的JWT,客户端可以存储在
- cookie
- localStorage
- 每次通信,客户端都要携带JWT,发送可以放在
- cookie ==> 自动发送+不能跨域
- HTTP请求的头信息
Authorization
字段里 - POST请求的数据体里
JWT的特点
- 默认不加密,但是可以加密
- 不加密情况下,不能将机密数据写入JWT
- 不仅可以用于验证,也可以交换信息
- 无法中途废止或更改权限,必须等到期
- 为了减少盗用
- 有效期应该设置短一些
- 对于重要权限,有必要再次进行用户认证
- 建议使用HTTPS协议传输