身份认证的实现——token

一、token的由来

使用session实现身份认证的缺陷:
1、服务器开销大:每个人只需要保存自己的session id,而服务器要保存所有人的session id,随着用户访问数量的增加session id也会不停的增加。
2、严重的限制了服务器扩展能力: 比如说我用两个机器组成了一个集群, 小F通过机器A登录了系统, 那session id会保存在机器A上, 假设小F的下一次请求被转发到机器B怎么办?机器B可没有小F的 session id啊。
没事,有解决方案
解决方案:session粘滞 session sticky , 就是让小F的请求一直粘连在机器A上, 但是这也不管用, 要是机器A挂掉了, 还得转到机器B去。
没事,还有解决方案
解决方案:做session 的复制了,把session id 在两个机器之间进行复制,麻烦。
没事,我还有解决方案
解决方案:做Redis集群,将session id 集中存储起来。

WTF?这么麻烦,服务器说我不保存session了, 让每个客户端去保存吧,于是token出现了。

二、什么是token

1、用户向服务器发送用户名和密码。
2、服务端收到请求,去验证用户名与密码
3、验证成功后,服务端会签发一个 Token(里面有用户信息),再把这个 Token 发送给客户端。
4、客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里
5、用户随后的每一次请求,都会通过 Cookie,将 token 传回服务器。
6、服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据

猜你喜欢

转载自blog.csdn.net/peanutwzk/article/details/107639017