DotNetOpenAuth RelayParty не работает на кластере с балансировкой нагрузки - PullRequest
2 голосов
/ 17 марта 2010

Мы пытаемся переместить приложение ASP.NET MVC, использующее DotNetOpenAuth OpenID версии 3.4.1, из веб-сада с одним сервером в кластер физических серверов, поддерживаемый аппаратным балансировщиком нагрузки.

Наша старая настройка (работает OpenID RP):

Браузер => SHTTP => Сервер => WebGarden => Nonce / Session Store

Наша новая настройка (не работает OpenID RP):

Браузер => SHTTP => Балансировщик нагрузки => HTTP => Узел кластера => WebGarden => БД Nonce / Session Store

Когда мы аутентифицируемся с новой настройкой, мы правильно перенаправляемся к провайдеру 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, но это не имеет значения. Мы даже попытались удалить одноразовое хранилище и использовать соединение без сохранения состояния, но это тоже не сработало. Мы всегда получаем одну и ту же ошибку.

Мы подозревали, что проблема возникает из-за того, что узел кластера имеет другой IP-адрес от балансировщика нагрузки при подключении к поставщику OpenID, но мы не уверены.

Есть идеи?


Спасибо за ответ, позвольте мне дать больше информации:

У нас есть как OP, так и RP. У нас есть несколько организаций, которые на самом деле не доверяют друг другу, поэтому мы распределяем провайдера для каждой организации, а затем используем обмен атрибутами для передачи пользовательских данных (адрес электронной почты, персональный номер и т. Д.) Без необходимости доступа к хранилища данных друг друга (обычно LDAP) напрямую.

Что нас озадачивает, так это то, что установка отлично работает на одном компьютере (например, когда мы подключаемся к узлу кластера напрямую), а не когда мы подключаемся к кластеру через аппаратный балансировщик нагрузки.

Мы перепробовали разные конфигурации на обоих концах, но пока безуспешно.

1 Ответ

4 голосов
/ 17 марта 2010

Ссылка на «ненадежный сервер», возможно, немного вводит в заблуждение. Это не имеет отношения к белому / черному списку в файле web.config, хотя это было хорошее предположение. В этом случае все является ненадежным сервером, потому что OpenID использует UntrustedWebRequestHandler, чтобы защитить ваш сайт от множества атак, которым в противном случае OpenID мог бы подвергнуть ваш сайт.

Похоже, что ваш RP завершает аутентификацию с помощью OP, проверяя ответ аутентификации с использованием прямой проверки (тупой режим), и что конечная точка OP сама отправляет ответ HTTP Redirect обратно на ваш RP. Это не разрешено Эта проблема возникает для каждого OP, с которого пытается войти ваш RP, или только с этим? Какие из них имеют эту проблему? Я хотел бы поговорить с владельцем ОП о том, что они делают.

...