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

Openid DotNetOpenAuth RelayParty不在负载平衡群集上工作,openid,load-balancing,dotnetopenauth,cluster-computing,web-garden,Openid,Load Balancing,Dotnetopenauth,Cluster Computing,Web Garden,我们正在尝试将一个ASP.NET MVC应用程序(使用DotNetOpenAuth OpenID版本3.4.1)从一个单服务器web garden移动到硬件负载平衡器后面的物理服务器集群 我们的旧设置(OpenID RP工作): 浏览器=>SHTTP=>Server=>WebGarden=>Nonce/Session存储 我们的新设置(OpenID RP不工作): 浏览器=>SHTTP=>LoadBalancer=>HTTP=>Cluster Node=>WebGarden=>Nonce/Ses

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

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

浏览器=>SHTTP=>Server=>WebGarden=>Nonce/Session存储

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

浏览器=>SHTTP=>LoadBalancer=>HTTP=>Cluster Node=>WebGarden=>Nonce/Session存储数据库

当我们使用新设置进行身份验证时,我们被正确地重定向到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)

让我们困惑的是,为什么设置在一台计算机上运行良好(例如,当我们直接连接到群集节点时),而不是当我们通过硬件负载平衡器连接到群集时

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

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


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

你关于从哪里开始寻找的建议似乎帮助很大。我们的代码最初基于dotnetopenauth示例,它使用当前请求url(不是https,而是集群节点上的http),因此我们在不使用https的情况下编写url,loadbalancer发送了大量302响应。最后,我们为所有负载平衡的应用程序添加了一个“强制https”开关,该开关修改了https方案中与OpenID相关的所有传出URL。这解决了问题。谢谢你的帮助。