无状态身份验证和有状态身份验证

Posted nizuimeiabc1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无状态身份验证和有状态身份验证相关的知识,希望对你有一定的参考价值。

有状态的:比如session,cookie,spring项目都用spring session实现redis存储session,或者用nginx + redis+tomcat实现负载均衡,使用ip_hash策略,能将来自同一IP的客户端请求派发给同一个服务实例,在分布式环境中,可以解决session不共享的问题。不要使用轮询策略。

无状态的:比如JWT(JSON Web Token),是可在网络上传输的用于声明某种主张的令牌(token),以JSON 对象为载体的轻量级开放标准(RFC 7519),是无状态的两种鉴权方式,组合产品包含shiro jwt和jwt spring security,因为shiro好像一直对restful不友好。

JWT的缺陷

JWT使用起来虽然简单方便,但它存在一个设计缺陷,即服务端无法主动注销token,所以jwt在安全性上不及session,实际开发中应谨慎使用。

如果要让服务端能够注销token,就要在服务端维持token状态,这又回到session机制了,所以在经常需要验证的场景中,建议还是使用session。

JWT这个缺陷决定了它更适合用在一次性token验证场景中,即token只使用一次就立即废弃掉,比如第三方登录授权。

以上是关于无状态身份验证和有状态身份验证的主要内容,如果未能解决你的问题,请参考以下文章

如何管理两个身份验证系统:有状态和无状态(缓存)

Flutter web 无密码登录不会触发身份验证状态更改

如何结合单点注销和无状态身份验证

如何使用 Play Silhouette 实现无状态 cookie 身份验证?

使用 Spring Boot 设置无状态身份验证

具有无状态服务器且无服务器端呈现的 cookie 中的 JWT 身份验证