我正在考虑使用 Java + Tomcat/JBoss 实现 OpenID 提供程序('OP')。
现在关于 OpenID 的关键之一是
- 用户与 OP 和 RP 进行通信,并与两个站点进行会话。
- OP 和 RP 相互通信以确保用户没有伪造任何东西。
我找不到任何文档的一个主题是关于如何在负载平衡的情况下正确实现这一点的问题。
我担心的一般问题是 RP 连接到 OP 并最终在与用户不同的应用程序服务器上。
我的问题:
- 处理这个问题的正确方法是什么?
- 什么是“最好的” OpenID 库?
谢谢。
我正在考虑使用 Java + Tomcat/JBoss 实现 OpenID 提供程序('OP')。
现在关于 OpenID 的关键之一是
我找不到任何文档的一个主题是关于如何在负载平衡的情况下正确实现这一点的问题。
我担心的一般问题是 RP 连接到 OP 并最终在与用户不同的应用程序服务器上。
我的问题:
谢谢。
我担心的一般问题是 RP 连接到 OP 并最终在与用户不同的应用程序服务器上。
将对话状态保存在共享存储中。即数据库或分布式缓存。缓存会更快,而且你不需要太多的持久性。
具有粘性会话的负载平衡(来自同一客户端的所有后续请求都到达同一服务器)将减少缓存更新的数量。
(我最初打算建议的群集 HTTP 会话不起作用,因为相同的会话分布在两个会话之间:用户会话和应用程序会话。)
在 OP 方面,真正需要在集群中的机器之间共享的唯一特定于 OpenID 的状态是关联(共享密钥及其句柄)。这是相当可缓存的;给定关联句柄的秘密永远不会改变,它们具有明确定义的生命周期,并且不应该有那么多。(也许,除非您使用一些使用无状态模式的大容量 RP。)
根据您的功能集和用户界面,用户可能会有一些其他会话状态,但这不需要应用于直接 RP-OP 通信,您可以使用标准的技巧包。