token cookie sessioId
2020-07-20 本文已影响0人
2020路飞
对于 session 来说,服务器是有状态的。这个事情就很麻烦,尤其是在分布式部署服务的时候,需要共享服务器之间的状态。总不能让用户不停重复登陆吧?虽然专门准备一个服务器用来处理状态是可行的,但是能不能让服务器变成无状态的,还不能像单纯 cookie 那么蹩脚?
token 就解决了这个问题。
它将状态保存在客户端,并且借助加密算法进行验证保证安全性。整体流程总结如下:
- 用户尝试登陆登陆成功后,后端依靠加密算法,将凭证生成 token,返回给客户端客户端保存 token,
- 每次发送请求时,携带 token后端再接收到带有 token 的请求时,验证 token 的有效性在整个流程中
比较重要的是:生成 token、验证 token 的过程。这里设计一种简单的技术实现:生成:token 的组成为:{HS256(user, secret)}。其中,secret 是加密需要的密钥,保存在服务端,不能泄漏。HS256 是加密算法,使用 RS256、HS512 也可以。验证:将请求中携带的 token 按照.分开,得到payload和sig。用服务器密钥对payload进行加密,将加密结果和sig比较,如果相同,那么通过验证。
token 的优点多多:
服务器变成无状态了,实现分布式 web 应用授权
可以进行跨域授权,不再局限父子域名
token 设计绝对了它本身可以携带更多不敏感数据,例如最常用的 JWT
安全性更高,密钥保存在服务器。若密钥被窃取,可以统一重新下发密钥。