http://www.jianshu.com/p/576dbf44b2ae
一、session认证存在的问题
session保存在内存中,因此随着用户量的增大会加大服务器开销。
由于session存在内存中,因此用户的每次请求需发送到同一台服务器,限制了服务器的负载均衡。
二、基于token的认证机制
token认证机制与http协议相同都是无状态的。
(1)用户使用用户名和密码来请求服务器
(2)服务器校验用户名密码,从而返回一个token
(3)客户端存储token,并将token附在请求的头文件上,每次请求都发送
(4)服务器端验证token值,并返回数据
三、JWT
构成:头部+载荷+签证
(1)头部 {'type':'JWT','alg':'HS56'} base64加密
(2)载荷:存放有效信息
标准中注册的声明:
iss: jwt签发者
sub: jwt所面向的用户
aud: 接收jwt的一方
exp: jwt的过期时间,这个过期时间必须要大于签发时间
nbf: 定义在什么时间之前,该jwt都是不可用的.
iat: jwt的签发时间
jti: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。
公共的声明:
公共的声明可以添加任何的信息,一般添加用户的相关信息或其他业务需要的必要信息.但不建议添加敏感信息,因为该部分在客户端可解密.
私有的声明:
私有声明是提供者和消费者所共同定义的声明,一般不建议存放敏感信息,因为base64是对称解密的,意味着该部分信息可以归类为明文信息。