【问题标题】:Lightweight stateful server session vs. stateless token (that requires server revocation list)轻量级有状态服务器会话与无状态令牌(需要服务器撤销列表)
【发布时间】:2016-06-20 06:40:03
【问题描述】:

当我使用服务器有状态会话时,我总是将它用于轻量级目的,例如仅存储用户的用户 ID、名称、时区和最后一页点击。对于 10,000 个用户,这最终可能是 ~3MB。内存不大,很容易和其他服务器保持同步,也很容易注销/撤销sessionid。

如果我使用 JWT 之类的无状态令牌,我似乎需要检查对服务器的每个请求的令牌,看看它是否在撤销列表中。并且该撤销列表必须至少具有两个字段,令牌 ID 和令牌最初有效的时间(以便最终可以删除该条目,否则撤销列表总是会增长)。另外,出于安全原因,我确信用户需要知道所有登录的会话,所以我仍然需要保留每个活动令牌的详细信息,包括它所针对的用户 ID 和该令牌的最后一页命中。

那么,使用无状态令牌(需要服务器撤销列表)与轻量级有状态服务器会话相比有什么好处?

【问题讨论】:

    标签: rest session asp.net-web-api token stateless


    【解决方案1】:

    真正的无状态服务器有几个好处:

    1. 缩放。必须复制状态,无论它多么小,都会限制节点的数量。

    2. 负载平衡。如果不复制状态,则必须使用粘性会话(同一用户始终连接到同一实例),这最终会导致负载不均。

    3. 滚动更新。在逐一更新服务器时(例如,如果您进行持续交付),会话复制和粘性会话都会使事情变得更加复杂,可能会完全阻止滚动更新。

    无论如何,我想如果您可以为更新安排停机时间、拥有有限的用户数量、有状态会话将不成问题,并且可能更容易实施。

    这些优势适用于不需要服务器会话的 JWT 等加密令牌。撤销列表使事情变得复杂,但由于它不需要存储在任何特定的服务器上,因此不会干扰。

    【讨论】:

    • 是的,但我问的是需要服务器撤销列表的无状态令牌。与轻量级有状态服务器会话相比,这有什么好处?
    • 我已经了解了真正无状态服务器的好处,这似乎是一个红鲱鱼——不是几乎总是需要撤销列表吗?如果是这样,那么它并不是真正的无国籍,对吧?
    • 很公平。我的意思是我列出的这些优势实际上适用于(加密)基于令牌的解决方案。服务器本身不需要状态的任何解决方案都具有我列出的那些功能。撤销列表可以很容易地共享,例如通过数据库,因此它不需要存储在生成令牌的服务器上。
    猜你喜欢
    • 1970-01-01
    • 2020-01-27
    • 2016-06-17
    • 1970-01-01
    • 2010-10-27
    • 1970-01-01
    • 2013-10-24
    • 2010-11-25
    相关资源
    最近更新 更多