微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

会话 – 可扩展Web应用程序的无状态登录/身份验证机制?

我正在尝试了解在为任意数量的Web服务器上运行的应用程序创建身份验证机制时所需的选项.到目前为止,我只有使用(web-)服务器端会话管理认证方面的小型网站的经验.但是,一旦我想在PaaS环境中添加更多的Web服务器(或“Web实例”),这种方法显然会成为一个问题;绑定到特定机器的身份验证状态来自于我的理解,而不是使用负载平衡(afaik粘性会话/粘性负载平衡是应该避免的).我正在寻找一个解决方案,让我可以动态地扩展Web服务器/实例的数量,而无需考虑身份验证机制.

我认为实现这一点的唯一方法是从我的Web服务器中获取会话/身份验证状态.这就是我所说的“无国籍”的意思.当然,这个状态必须暂时保存在某个地方,所以必须有一些不是无状态的东西.

我可以使用数据库服务器来管理所有的auth会话.可以在每个http请求上从我所有的Web服务器访问数据库服务器,以请求用户的身份验证状态.但是由于数据库服务器比Web服务器更难扩展(这将是我的假设,而没有任何经验),我只是将问题从Web服务器移动到数据库服务器.除此之外,我不认为这是表现的最佳解决方案.

而不是数据库服务器,我可以使用像memcached或redis这样的缓存服务器来管理会话以进行身份​​验证.我认为这会最大限度地降低可伸缩性问题,因为单个缓存服务器可以以一种高效的方式管理大量的会话(或者这个时候我错了吗?).但是我有时会读这样的东西,就像“关于缓存的一个重要的一点是,它的行为就像一个缓存应该是:你刚刚存储的数据可能会失踪.那么这将是一个问题.我不希望用户每2个小时登录一次.我的问题是:如果缓存有足够的内存,为什么缓存中的数据会丢失?缓存服务器中的250MB内存不足以同时管理超过一百万个会话,而不必摆脱数据(使用简单的键值对将会话ID映射到用户ID或其他方式时)?

第三种解决方案可能是将auth sesson状态存储在由服务器签名并且不能被客户端操纵的cookie中.但是如果我没有错,服务器端无法强制执行某个用户的注销…

总结我的要求:

>我想在负载均衡器的上下方向扩展Web服务器
验证系统应该处理它
>用户应该被允许登录至少几天
像例如在stackoverflow.com上
>如果有的话,服务器端应该能够关闭用户
理由这样做

我对最佳做法感兴趣我认为有一大堆网站
面对同样的问题并找到解决办法.

解决方法

This github project一个很好的开始的地方.执行在玩!框架,但它是我认为你以后的一个很好的解释.也有助于克服应用程序中固有的CSRF.

服务器在登录后发回auth_token(通过https). auth_token保存为一个cookie(只是这样它将被持久化,可以从客户端访问).当auth_token发出请求时,它被放置为保存在cookies中的HTTP头(通过JavaScript).然后,它被服务器请求处理程序拉出,并根据每个请求进行验证.所以它的一个cookie – 但不用作一个cookie.一个“两次烤”的cookie如果你会:)链接详细解释更多.

而另一个答案here on stack overflow我发现解释了一个非常相似的事情. “没有会话的会话”.

然后如果你真的想挖掘它,请查看owasp.org关于CSRF预防,这解释了类似的技术在标题General Recommendation: Synchronizer Token Pattern

所有通信应为HTTPS.

原文地址:https://www.jb51.cc/html/229391.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐