Jasig .NET CAS クライアントを使用して、組織の CAS SSO サーバーとのインターフェイスをとっています。
ただし、ASP.NET MVC 3 (これは ASP.NET WebForms にも影響すると思います) アプリケーションでは、ユーザーがログアウトすると、エラー ログに次のエラーが表示されることに気付きました。
System.Web.HttpRequestValidationException (0x80004005):
A potentially dangerous Request.Form value was detected from the client
(logoutRequest="<samlp:LogoutRequest...").
at System.Web.HttpRequest.ValidateString(String value, String collectionKey, RequestValidationSource requestCollection)
at System.Web.HttpRequest.ValidateNameValueCollection(NameValueCollection nvc, RequestValidationSource requestCollection)
at System.Web.HttpRequest.get_Form()
at System.Web.HttpRequest.FillInParamsCollection()
at System.Web.HttpRequest.GetParams()
at DotNetCasClient.Utils.RequestEvaluator.GetRequestIsCasSingleSignOut() in C:\Projects\Jasig\CAS\dotnet-client\trunk\DotNetCasClient\Utils\RequestEvaluator.cs:line 292
at DotNetCasClient.CasAuthenticationModule.OnBeginRequest(Object sender, EventArgs e) in C:\Projects\Jasig\CAS\dotnet-client\trunk\DotNetCasClient\CasAuthenticationModule.cs:line 93
at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
これはユーザーが受け取るエラー メッセージではないと思います。サーバーでのみ表示されるようです。ユーザーに関する限り、ログアウトは成功しています。
ASP.NET MVC がこれらの種類の要求を検証しようとするのをやめる方法はありますか? リクエストの検証を完全に無効にできることは知っていますが、それは問題外です。ハイフンのあるサイトにはこれに関する良い質問がありますが、実際には受け入れられる答えではありません:
次の設定を web.config に追加します。
<httpRuntime requestValidationMode="2.0" />
この値を設定した後、U は validateRequest="false" を設定することでリクエストの検証を無効にすることができます
では、このリクエストの ASP.NET 検証を完全にオフにせずに無効にする方法はありますか?
編集:このリクエストは、ユーザーのブラウザからではなく、CAS サーバーから送信されるため、これもデバッグが困難です。これは、ユーザーがサインアウトしたことを実行中のすべてのアプリケーションに通知しようとしている CAS サーバーだと思います (シングル サインアウト)。したがって、ローカルでテストするときではなく、本番環境でのみこのエラーが発生します。