DotNetOpenAuth RelayParty不在负载均衡集群上工作

时间:2010-03-17 12:39:11

标签: openid load-balancing dotnetopenauth cluster-computing web-garden

我们正在尝试将使用DotNetOpenAuth OpenID版本3.4.1的ASP.NET MVC应用程序从单个服务器Web园移动到硬件负载平衡器后面的物理服务器集群。

我们的旧设置(OpenID RP工作):

浏览器=> SHTTP =>服务器=> WebGarden => Nonce / Session Store

我们的新设置(OpenID RP无法正常工作):

浏览器=> SHTTP => Load Balancer => HTTP =>群集节点=> WebGarden =>随机数/会话存储数据库

当我们使用新设置进行身份验证时,我们会被正确地重定向到OpenID提供程序,但经过身份验证后,我们会重定向回我们的群集(中继方)并获得以下异常:

异常

DotNetOpenAuth.Messaging.ProtocolException: Redirects on POST requests that are to untrusted servers is not supported.
 at DotNetOpenAuth.Messaging.ErrorUtilities.VerifyProtocol(Boolean condition, String message, Object[] args) in c:\TeamCity\buildAgent\work\bf9e2ca68b75a334\src\DotNetOpenAuth\Messaging\ErrorUtilities.cs:line 235
 at DotNetOpenAuth.Messaging.UntrustedWebRequestHandler.GetResponse(HttpWebRequest request, DirectWebRequestOptions options) in c:\TeamCity\buildAgent\work\bf9e2ca68b75a334\src\DotNetOpenAuth\Messaging\UntrustedWebRequestHandler.cs:line 258
 at DotNetOpenAuth.OpenId.ChannelElements.OpenIdChannel.GetDirectResponse(HttpWebRequest webRequest) in c:\TeamCity\buildAgent\work\bf9e2ca68b75a334\src\DotNetOpenAuth\OpenId\ChannelElements\OpenIdChannel.cs:line 277
 at DotNetOpenAuth.Messaging.Channel.RequestCore(IDirectedProtocolMessage request) in c:\TeamCity\buildAgent\work\bf9e2ca68b75a334\src\DotNetOpenAuth\Messaging\Channel.cs:line 542
 at DotNetOpenAuth.Messaging.Channel.Request(IDirectedProtocolMessage requestMessage) in c:\TeamCity\buildAgent\work\bf9e2ca68b75a334\src\DotNetOpenAuth\Messaging\Channel.cs:line 425
 at DotNetOpenAuth.Messaging.Channel.Request[TResponse](IDirectedProtocolMessage requestMessage) in c:\TeamCity\buildAgent\work\bf9e2ca68b75a334\src\DotNetOpenAuth\Messaging\Channel.cs:line 405
 at DotNetOpenAuth.OpenId.ChannelElements.SigningBindingElement.ProcessIncomingMessage(IProtocolMessage message) in c:\TeamCity\buildAgent\work\bf9e2ca68b75a334\src\DotNetOpenAuth\OpenId\ChannelElements\SigningBindingElement.cs:line 154
 at DotNetOpenAuth.Messaging.Channel.ProcessIncomingMessage(IProtocolMessage message) in c:\TeamCity\buildAgent\work\bf9e2ca68b75a334\src\DotNetOpenAuth\Messaging\Channel.cs:line 992
 at DotNetOpenAuth.OpenId.ChannelElements.OpenIdChannel.ProcessIncomingMessage(IProtocolMessage message) in c:\TeamCity\buildAgent\work\bf9e2ca68b75a334\src\DotNetOpenAuth\OpenId\ChannelElements\OpenIdChannel.cs:line 172
 at DotNetOpenAuth.Messaging.Channel.ReadFromRequest(HttpRequestInfo httpRequest) in c:\TeamCity\buildAgent\work\bf9e2ca68b75a334\src\DotNetOpenAuth\Messaging\Channel.cs:line 386
 at DotNetOpenAuth.OpenId.RelyingParty.OpenIdRelyingParty.GetResponse(HttpRequestInfo httpRequestInfo) in c:\TeamCity\buildAgent\work\bf9e2ca68b75a334\src\DotNetOpenAuth\OpenId\RelyingParty\OpenIdRelyingParty.cs:line 501

我们在受信任的机器列表中添加了一台机器并关闭需要ssl,但它没有任何区别。我们甚至尝试删除nonce存储并使用无状态连接,但这也不起作用。我们总是得到同样的错误。

我们怀疑问题是由于群集节点在连接到OpenID提供程序时与负载均衡器具有不同的IP而产生的,但我们不确定。

有什么想法吗?


感谢您的回复,让我提供更多信息:

我们内部有OP和RP。我们有多个组织并不真正相互信任,因此我们将提供商分发给每个组织,然后使用属性交换来传递用户数据(电子邮件地址,个人号码等),而无需访问彼此直接数据存储(通常是LDAP)。

令我们困惑的是,为什么设置在单台计算机上正常工作(例如,当我们直接连接到群集节点时),而不是在我们通过硬件负载平衡器连接到群集时。

我们已经在两端尝试了各种不同的配置,但到目前为止没有运气。

1 个答案:

答案 0 :(得分:4)

对“不受信任的服务器”的引用可能有点误导。它与web.config文件中的白名单/黑名单没有关系,尽管这是一个很好的猜测。在这种情况下,一切都是不受信任的服务器,因为OpenID使用UntrustedWebRequestHandler来保护您的站点免受OpenID可能以其他方式暴露您的站点的无数攻击。

看起来您的RP通过使用直接验证(哑模式)检查身份验证响应来完成OP的身份验证,并且OP端点本身正在向您的RP发送HTTP重定向响应。这是不允许的。您的RP尝试登录的每个OP都会发生此问题吗?哪一个人表现出这个问题?我想和OP老板讨论他们正在做什么。