共计 990 个字符,预计需要花费 3 分钟才能阅读完成。
一、什么是 JSON Web Token?
1、为什么使用 JSON Web Token
JSON Web Token是 cookie session 机制的一种替代方案。
一般我们用户认证的流程是:
(1)用户将用户名和密码发送给服务器
(2)服务器验证并通过后,将信息存放在session 中
(3)返回给客户端一个 sessionId
(4)客户端将 sessionId 保存在cookie 中
(5)客户端后续的请求,都会将 cookie 一并发给服务器,里面就包含了 sessionId
(6)客户端通过sessionId 识别用户
但是在跨域登陆情况下(跨域即跨域名登陆,也就是可能会有好几个不同的服务器),多个服务器需要共享 session。这种情况下使用 JSON Web Token 就会有更加方便。
2、JSON Web Token 的原理
JSON Web Token实际上是一个 JSON 对象,使用流程为:
‘
(1)用户将用户名和密码发送给服务器
(2)服务器将验证并通过以后,生成JSON Web Token,并发送给客户端
(3)客户端将其保存在 local storage 或本地数据库
(4)下次客户端再次发起请求,将 Token 附加到 header 中
(5)服务器完全通过JSON Web Token 来识别用户
这里值得注意的是,为了保证安全性,在第(2)步中,服务器会通过加密算法将 Token 加密,也就是说客户端保存的是个加密的 Token,到第(5)步服务器对其进行解密。
3、JSON Web Token 的数据结构
Token 一般为三部分组成:Header.Payload.Signature
(1)Header(头部):一般包含签名的算法和令牌的属性
(2)Payload(负载):实际需要传递的数据( 一般不加密,因此不要把重要信息放在里面)
(3)Signature(签名):Signature 部分是对前两部分的签名,防止数据篡改。格式一般如下(secret 为密钥,只有服务器自己知道):
HMACSHA256(base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
4、特点
(1)使用 json 作为数据传输,有广泛的通用型,并且体积小,便于传输
(2)不需要在服务器端保存相关信息,完全通过 Token 来认证
(3)jwt 载荷部分可以存储业务相关的信息(非敏感的),例如用户信息、角色等,因此也可以用于交换信息。