JWT基础知识
1> JWT定义
JSON Web Token (JWT) 是一种开放的行业标准(RFC 7519),用于安全传送认证信息. 是目前流行的跨域认证的解决方案。
2> JWT数据结构
由三部分组成:
Header(头部) . Payload(负载) . Signature(签名)
2.1> Header部分:
由Token类型 ("JWT") 和 算法名称 ("HS256"等)组成 ,再用Base 64对JSON编码。
2.2>Payload部分:
由声明部分组成。声明有三种类型:Registered,Public,Private
- Registered Claims: 预定义的声明,建议不是强制。
例如:
iss ( Issuer ) 签发者
exp ( Expiration Time) 过期时间
sub ( Subject ) 所面向的用户
aud ( Audience ) 接收者
- Public Claims: 可自定义任何信息,一般添加用户相关信息或业务需要信息
- Private Claims: 提供者和消费者所共同定义的声明
注意:不要在JWT的payload或header中放置敏感信息
2.3> Signature
签名是用于验证消息在传递过程中有没有被更改,并且,对于使用私钥签名的token,它还可以验证JWT的发送方是否为它所称的发送方。
附上官网用于校验JWT内容 https://jwt.io/
3> Cookie认证过程与JWT区别
- Cookie认证
- 用户携带用户名和密码请求访问
- 服务器校验成功后,在session中保存相关数据(用户,角色,登录时间等相关信息)
- 服务器向用户返回一个session_id,写入cookie
- 用户每次请求都要通过cookie,将session_id传到服务器
- 服务器通过session_id,找到前期保存数据得知用户身份
-
JWT认证
- 用户携带用户名和密码请求访问
- 服务器校验用户凭据
- 应用提供一个token给客户端
- 客户端存储token,并且在随后的每一次请求中都带着它
- 服务器校验token并返回数据
Token认证优点:
1.支持跨域:Cookie是不允许跨域访问。
2.无状态:Token机制不需要存储服务端存储任何状态。
Token认证缺点:
1.无法在使用过程中废止某个 token,或者更改 token 的权限