2009-06-02 11 views
5

ASP.NET MVCアプリケーションでは、<authentication>セクションの<system.web>セクションを介してユーザーをログオンページに自動的にリダイレクトし、承認専用ページにアクセスしようとします。問題は、ツールで使用するように設計されたアプリケーションの途中の1つのアクションが、不正なアクセスに対してまっすぐなHTTP 401応答を返す必要があるということです。実際のHTTP 401コードこの特定のアクションのリダイレクトなしで返すにはどうすればよいですか?単一ページのASP.NETフォーム認証を無効にする

答えて

6

次のソリューションが動作するには必要な401コードを生成するためにHttpUnauthorizedResultの代わりに上記の結果を返します。しかし、これは私にとってかなりクルーギーだと感じています。

4

個別のパスに別の<system.web>セクションを追加することができます。ここでは例を示します。この場合

<configuration> 
    <location path="Foo/Bar.aspx"> 
    <system.web> 
     <authorization> 
     <allow roles="GoodGuys" /> 
     <deny users="*"/> 
     </authorization> 
    </system.web> 
    </location> 
</configuration> 

、ページ「フー/ Bar.aspxは」GoodGuys役割を持つ人々に許可されますが、すべての人に拒否されます。

あなたのケースでは、あなたが認証なしですべての許可が必要になる場合があります

public class HttpAuthenticationRequiredResult : ActionResult 
{ 
    public override void ExecuteResult(ControllerContext context) 
    { 
     var response = context.HttpContext.Response; 
     response.StatusCode = 401; 
     response.AddHeader("WWW-Authenticate", "Basic realm=\"whatever\""); 
     response.Flush(); 
     response.Close(); 
    } 
} 

あなたはその後、次のことができます。私は全くそれが最適だか分からないが、

<configuration> 
    <location path="Foo/Bar.aspx"> 
    <system.web> 
     <authentication mode="None" /> 
     <authorization> 
     <allow users="*" /> 
     </authorization> 
    </system.web> 
    </location> 
</configuration> 
+0

、私はASP.NET MVCでその技術を使用するのかは不明です。問題は、should-return-401のURLがmyapp/{routパラメータ}/toolにあることです。私が望んでいたとしても、system.webで指定する方法はありません。 –

+0

* blush *あなたの投稿を読むと「MVC」が表示されませんでした。 – Randolpho

+0

これは認証要素に対して機能しますが、認証では機能しません。次のエラーが発生します。 この要求を処理するために必要な構成ファイルの処理中にエラーが発生しました。以下の特定のエラーの詳細を確認し、設定ファイルを適切に変更してください。アプリケーションレベルを超えてallowDefinition = 'MachineToApplication'として登録されたセクションを使用するとエラーになります。 –

0

私は、望ましくないリダイレクト(基本的に認証が失敗し、エラー情報なしでログイン画面にリダイレクトされていたことに関するメッセージ)を返す必要があった同様のケースがありました。

これは、問題を解決する:これはASP.NETストレートアップした場合は、それが働くだろう

Response.SuppressFormsAuthenticationRedirect = true; 
関連する問題