JSON Web Token是cookie session机制的一种替代方案。
通常咱们用户认证的流程是:算法
(1)用户将用户名和密码发送给服务器
(2)服务器验证并经过后,将信息存放在session中
(3)返回给客户端一个sessionId
(4)客户端将sessionId保存在cookie中
(5)客户端后续的请求,都会将cookie一并发给服务器,里面就包含了sessionId
(6)客户端经过sessionId识别用户数据库
可是在跨域登录状况下(跨域即跨域名登录,也就是可能会有好几个不一样的服务器),多个服务器须要共享session。这种状况下使用JSON Web Token就会有更加方便。json
JSON Web Token其实是一个JSON对象,使用流程为:
‘
(1)用户将用户名和密码发送给服务器
(2)服务器将验证并经过之后,生成JSON Web Token,并发送给客户端
(3)客户端将其保存在local storage 或本地数据库
(4)下次客户端再次发起请求,将 Token 附加到 header 中
(5)服务器彻底经过JSON Web Token来识别用户跨域
这里值得注意的是,为了保证安全性,在第(2)步中,服务器会经过加密算法将Token加密,也就是说客户端保存的是个加密的Token,到第(5)步服务器对其进行解密。安全
Token通常为三部分组成:Header.Payload.Signature
(1)Header(头部):通常包含签名的算法和令牌的属性
(2)Payload(负载):实际须要传递的数据(通常不加密,所以不要把重要信息放在里面)
(3)Signature(签名):Signature 部分是对前两部分的签名,防止数据篡改。格式通常以下(secret为密钥,只有服务器本身知道):服务器
HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
(1)使用 json 做为数据传输,有普遍的通用型,而且体积小,便于传输
(2)不须要在服务器端保存相关信息,彻底经过Token来认证
(3)jwt 载荷部分能够存储业务相关的信息(非敏感的),例如用户信息、角色等,所以也能够用于交换信息。cookie