EPiServer で実行されている顧客のサイトの一部で、 WIF を使用してユーザーを識別する可能性を調査しています。私は、特に次の投稿を使用して、WIF を有効にすることができました。
設定すると、これはうまく機能します
<authorization>
<deny users="?"/>
</authorization>
web.config で、すべてのリクエストに認証済みユーザーが必要になるようにします。ただし、EPiServer を使用して、匿名ユーザーと認証済みユーザーが利用できるコンテンツを分離したいと考えています。問題は、私はそれを機能させることができないということです。
WIF を有効にして を設定しないとdeny users="*"
、EPiServer が開始され、WIF が有効になってリダイレクトを実行する前に、いくつかのテキストが応答ストリームに出力されます。
HTTP/1.1 401 Unauthorized
Cache-Control: private
Content-Type: text/html
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Tue, 01 Nov 2011 07:51:04 GMT
Connection: close
Access denied.
</pre></table></table></table></table></table></font></font></font></font></font></i></i></i></i></i></b></b></b></b></b></u></u></u></u></u><p> </p><hr>
これにより、WIF が STS にリダイレクトしようとすると、次のエラーが発生します。
「/」アプリケーションでサーバー エラーが発生しました。
HTTP ヘッダーが送信された後はリダイレクトできません。
説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。
例外の詳細: System.Web.HttpException: HTTP ヘッダーが送信された後にリダイレクトできません。
ソース エラー:
現在の Web 要求の実行中に未処理の例外が生成されました。例外の発生元と場所に関する情報は、以下の例外スタック トレースを使用して特定できます。
スタックトレース:
[HttpException (0x80004005): HTTP ヘッダーが送信された後にリダイレクトできません
。 ) +249
Microsoft.IdentityModel.Web.WSFederationAuthenticationModule.OnEndRequest(オブジェクト送信者、EventArgs 引数) +438
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +68 System.Web.HttpApplication.ExecuteStep(IExecutionStep ステップ, Boolean& completedSynchronously) +75
この動作をオーバーライドできるように、高低の両方を検索しました。EPiServer.dll で、出力内容と同様のテキストを出力する次の場所を見つけました。
AccessDeniedDelegateHandler.cs
、メソッドBrowserLogonAccessDenied(object sender)
:
internal static void BrowserLogonAccessDenied(object sender)
{
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.Status = "401 Unauthorized";
HttpContext.Current.Response.Write("Access denied.");
HttpContext.Current.Response.Flush();
HttpContext.Current.Response.End();
}
私が見る限り、このコードは次の 2 つの場所から呼び出されます。
EPiServer.Global
、 方法protected virtual void HandleAccessDenied()
EPiServer.PageBase
、 方法public virtual void AccessDenied()
でオーバーライドHandleAccessDenied
して、自分のページ テンプレートでオーバーライドしようとしました。ただし、「アクセスが拒否されました」というテキストは引き続き出力されます。ページ テンプレートのオーバーライドが起動しているように見えますが、オーバーライドは起動していないようです。Global.asax
AccessDenied
AcccessDenied
HandleAccessDenied
ここで何が間違っている可能性があるかについてのヒントはありますか?