什么是有状态登录和无状态登录

137 阅读3分钟

什么是有状态登录和无状态登录

有状态登录

有状态登录就是需要服务端保持大量的用户信息,来校验该用户是否有权限访问,例如:浏览器在第一次访问服务端的时候,服务端会生成一个sessionId返回给浏览器,这时候浏览器就会保持在cookie里面,下次访问服务器的就是就会携带这个标识,服务端就会拿cookie和session进行校验,这样就称为有状态。

image.png 有状态登录缺点: 1:需服务端保存大量的用户session信息,增大服务端负载 2:服务集群部署时需要采用额外的分布式存储方案(才有了后面的单点登录)

无状态登录

也就是无需服务端进行用户信息存储,即通过一个token进行接口校验,token信息是一个加密算法,例如rsa,sha256等等, token信息可以包含用户的一些信息以及失效时间,例如常用的框架有jwt。 注:token的派发和鉴权可使用jwt框架 无状态登录弊端: 1:安全性问题,例如派发出去的token如果被盗用了,岂不是存在多方登录态的情况,出现安全性问题。 2:服务端不存储用户的登录凭证,对用户登录态不好管理

image.png 无状态登录好处 1:减少服务端存储,降低服务器负载 2:与服务端的登录态解耦,不需要依赖服务端,只要获取到登录凭证,且在有效期范围内,都可以访问任意一台服务 3:服务端集群状态对客户端透明 4:服务端可以水平扩展

总结:有状态登录和无状态登录都各有千秋,没有完美的技术,只有完美的解决方案,得看其中取舍。例如无状态登录的好处很多,但是他带来的最核心的问题就是安全性问题(例如:如何把用户踢下线,账号丢失时用户修改账号密码如何更新原来旧的用户凭证),以及后续的token续签问题。 关于安全性安全性问题:我们可以采用进一步存储,采用redis将该用户的凭证进行缓存起来,用户踢下线的时候把redis缓存起来的也清理掉,在授权中心校验的时候同时也校验一下缓存是否存在,但是这样是新增一条链路访问,降低了效率,但是技术就是有舍有得。 关于token失效重新派发问题:我们可以在客户端每次访问的时候,服务端在校验token即将失效的时候,例如15分钟过后就要失效了,这时候接口响应结果通知客户端,客户端进行token重设置等等。!!**