2

DotNetOpenAuth OpenID バージョン 3.4.1 を使用する ASP.NET MVC アプリケーションを、単一サーバーの Web ガーデンから、ハードウェア ロード バランサーの背後にある物理サーバー クラスターに移動しようとしています。

私たちの古いセットアップ (OpenID RP が動作):

ブラウザ => SHTTP => サーバー => WebGarden => ナンス/セッション ストア

新しいセットアップ (OpenID RP が機能しない):

Browser => SHTTP => Load Balancer => HTTP => Cluster Node => WebGarden => Nonce/Session Store DB

新しいセットアップで認証すると、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 台のコンピューターで (たとえば、クラスター ノードに直接接続した場合) セットアップが正常に機能する理由は、私たちを困惑させます。

両端であらゆる種類の異なる構成を試しましたが、今のところうまくいきません。

4

1 に答える 1

4

「信頼できないサーバー」への言及は、おそらく少し誤解を招く可能性があります。それは良い推測でしたが、web.configファイルのホワイトリスト/ブラックリストとは関係ありません。この場合、OpenIDはUntrustedWebRequestHandlerを使用して、OpenIDがサイトを公開する可能性のある無数の攻撃からサイトを保護するため、すべてが信頼できないサーバーになります。

RPが直接検証(ダムモード)を使用して認証応答をチェックすることによりOPでの認証を終了しており、OPエンドポイント自体がHTTPリダイレクト応答をRPに送り返しているようです。これは許可されていません。この問題は、RPがログインしようとするすべてのOPで発生しますか、それともこれだけで発生しますか?どれがこの問題を示していますか?OPオーナーと彼らが何をしているのか話したいと思います。

于 2010-03-17T17:45:25.927 に答える