我们在某些ArcGIS Server Web服务上使用基于令牌的安全性,并且我正在努力更好地了解它们的工作方式。我们目前必须使用粘性会话,因为我们有冗余和性能的负载平衡服务。但是,我阅读的所有文档(例如下面的文章)都表明,使用令牌身份验证实际上应该不再需要粘性会话。在完成所有阅读之后,我仍然不确定为什么会这样。
如果用户登录并从我们的一个负载平衡服务器接收令牌,并且令牌随每个后续请求一起传递,为什么不必确保请求最终在同一服务器上。其他服务器如何能够验证令牌?根据我的读数,我可以想到的唯一方法是,可以在没有粘性会话的情况下工作,将令牌签名存储在所有负载平衡服务器可用的中央存储库中。然后,这与仅存储令牌本身没有什么不同,这与存储会话信息相同。
http://code.tutsplus.com/tutorials/token-based-authentication-with-angularjs-nodejs--cms-22543
答案 0 :(得分:1)
根据我的读数,我能想到的唯一方法就是这样 没有粘性会话的工作是存储令牌签名 在所有负载平衡服务器可用的中央存储库中。
是的,这是对的。链接的文章确实显示了持久性令牌存储。
唯一的例外是如果使用JWT(也在链接文章中),或者类似的机制不存储令牌服务器端。
这是因为即使用户名在JWT中,可以存储在cookie客户端,用户名也受MAC保护。此消息验证代码使用服务器端密码对用户名进行哈希处理。这个秘密可以在所有负载均衡的服务器之间共享,重新运行MAC算法可以确保客户端存储的用户名没有被篡改。
在实践中,请记住始终存储到期日期 - 否则您的JWT将容易受到重播攻击(例如,有效用户保存其Cookie值以供以后使用时,如果他们可能无权访问该用户)。