1

ネット構成があります:

クライアント - FW - IIS

IIS はポート 8080 をリッスンしています。IIS には MyApp などの Web アプリケーションがあります。FW は単純なポート フォワーディングを実装します (ポート 80 をポート 8080 に置き換えます)。次の場合を想定します。

クライアントが要求http://MyWebSite/MyApp/Index.aspxし、FW は標準ポート 80 を 8080 に変更し、要求は http://MyWebSite:8080/MyApp/Index.aspxです。IIS はクライアントが要求したページ Index.aspx に戻ります 1 つの重要なこと: ユーザーがブラウザーでタイプするとhttp://MyWebSite/myapp/index.aspxIIS が戻りますhttp://MyWebSite/MyApp/Index.aspx(そのため、実際のアプリケーション名に従って URL アドレスが変更されます)。すべてがうまく機能します。

しかし、標準パイプライン WIF に挿入すると問題が発生します。たとえば、MyApp が認証されたユーザーのみを受け入れるようにします。ユーザーを ID プロバイダーにリダイレクトしたいと考えています。ユーザーがページ spx を取得しようとするとhttp://MyWebSite/MyApp/Index.a、すべて正常に機能し、ユーザーは IP にリダイレクトされます。ただし、ユーザーがhttp://MyWevSite/myapp/index.aspx(小文字のアプリケーション名) を取得しようとすると、IIS はクライアント リダイレクトに戻りますhttp://MyWebSite:8080/MyApp/Index.aspx。ポート 8080 が FW で閉じられているため、ユーザーはエラーを受け取ります。アプリケーションから WIF を削除すると、すべて正常に動作します。

誰かが問題に遭遇しましたか?

4

1 に答える 1

1

この問題は Reflector によって発見されました。これは WIF の CookieHandler にあります。

ブラウザーは、要求されたパスが CookieHandler によって設定されたパス (既定では IIS 上のアプリケーションの仮想ディレクトリ) に一致する (大文字と小文字を区別する) 場合にのみ、Cookie を送信します。WIF は、要求を処理するときに、要求されたパスを CokkieHandler のパスと比較します。それらが一致しない場合 (大文字と小文字が区別される)、WIF は、ユーザーが大文字と小文字を区別して間違った URL を入力しただけであると見なしますが、ユーザーはまだアプリケーションにアクセスしたいと考えていますが、大文字と小文字が一致しないため、ユーザーのブラウザーはセッション Cookie を送信しません。したがって、WIF の CookieHandler正しい URL にリダイレクトしますが、実際のポート番号については何も知らないため、要求されたポート番号を追加して応答をリダイレクトします。ブラウザがリダイレクトしようとすると、要求されたポートが FW で閉じられ、エラーが発生します。

.NET FW 4.5 では、独自のカスタム CookieHandler を使用し、その MatchCookiePath メソッドを実装することで、CookieHandler の既定の動作をオーバーライドできます (たとえば、アプリケーション構成ファイルから特別なポート番号を追加できます)。

また、小文字の URL とアプリケーション名のみを使用し、WIF が処理を開始する前に各リクエストを小文字にすることもできます。そうすれば、リダイレクトは発生しません。

于 2013-02-27T04:34:23.277 に答える