2

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 サーバーだと思います (シングル サインアウト)。したがって、ローカルでテストするときではなく、本番環境でのみこのエラーが発生します。

4

2 に答える 2

6

dotnetcas クライアントは、MVC コントローラー アクションに到達する前に要求にアクセスできるため、MVC コントローラーまたはアクションで単純に検証属性を設定することはできません。

このリクエストのターゲットは、検証された最後の URL のようです。そのため、次のいずれかの方法を使用してアプリケーション内の特定のパスの検証を無効にすることはできません: http://erikbra.wordpress.com/2012/04/ 17/wif-saml-token-post-and-requestvalidationmode2-0/

私が見たところ、いくつかのオプションがあります。

この検証を無効にします。

<system.web>
  <httpRuntime  requestValidationMode="2.0" />
</system.web>

また

.Net 4.5 では、検証を通過する前にリクエストにアクセスできます。これにアクセスできる場合は、ソースからクライアントを再コンパイルして、関連する問題を修正できます。

于 2012-09-12T16:08:20.840 に答える
0

Jasig .NET CAS には詳しくありませんが、ASP.NET MVC を使用すると、ページ レベルで要求の検証を無効にすることができます。

次の属性をコントローラー アクションに追加します。

[ValidateInput(false)]
于 2012-08-12T18:26:21.287 に答える