2013-02-26 10 views
14

を使用する場合、私はWindows認証を使用していますMVC4 Webアプリケーションを持っている、それは私が
<authentication mode="Windows" /> を持っており、それが正常に動作し、すべてがOKであるweb.configファイルです。使用匿名認証全体のアプリケーションがWindows Authenticaion

しかし、今では、第三者コンポーネントから匿名でアクセスする必要があるコントローラー(実際にはWeb APIコントローラー)が必要です。問題は、このメソッドを呼び出すたびにユーザー資格情報を要求することです。

コントローラとメソッドにAllowAnonymous属性を入れてみましたが、成功しませんでした。

[AllowAnonymous] public bool Get(string Called, string Calling, string CallID, int direction)

私は、匿名認証とWindows認証を有効にしてIIS ExpressとIIS 8の両方にチェックしました。

Windows認証は、他の認証に先行しており、上書きできないようです。

これを行う方法はありますか?

答えて

14

これをWeb.configに追加します。ここでは、私のコントローラは "WebhookController"という名前です。

<location path="Webhook"> 
    <system.web> 
    <authorization> 
     <allow users="*"/> 
    </authorization> 
    </system.web> 
</location> 

See this KB article for more info.

編集 - エリックは、セキュリティのためのweb.config <authorization>タグを使うべきではありませんMVCアプリケーションでは、後述するように。代わりに、[Authorize]属性を使用します。そうすることで、[AllowAnonymous]属性が正しく動作するようになります。そして、あなたのプロジェクトをクリックし、ソリューションエクスプローラで

<authorization> 
    <deny users="?" /> 
</authorization> 

You can read more about this here.

+0

私はこれが私のために働くだろうとは思いません。この設定は ' "で上書きされ、Webサイトには引き続きユーザー名とパスワードが必要です。 MVCを使用していて、web.configでこのような設定を行うと、ルーティングのために常に役立つとは限りません。 –

+0

それは私のために働く。また、MVC3で ''を使用しています。私は特別なルーティングルールを設定していません。ロケーションパスを混乱させる必要があるかもしれません。 –

+0

もう一度試してみてください。それは 'AllowAnonymous'属性がWindows認証では不十分で、 'location'タグがうまくいくようです。問題の正しい解決策を教えてくれてありがとう! –

3
受け入れ答えは時代遅れのように思わ

、そう...あなたのweb.configファイルで

、これらの行を削除しますf4をクリックします(またはプロパティエクスプローラを開きます)。匿名認証を有効にします。

AuthorizeAllowAnonymous属性を自由に使用できます。彼らはかなり簡単です、Authorizeは、アクションまたはコントローラにアクセスするためにユーザが承認される必要があることを意味し、AllowAnonymousはその反対を意味します。許可されていないユーザーがAuthorize属性のコントローラまたはアクションにアクセスしようとすると、ログインページにリダイレクトされます。コントローラーにAuthorizeを置くと、コントローラーのすべてのアクションに適用されますが、AllowAnonymousのアクションは除きます。

0

web.configは、hereのように触れてはなりません。

AllowAnonymousおよび[Authorize](必要に応じて、いくつかのカスタム許可属性)を使用する必要があります。実行すべき

ステップ:

  1. すべてのコントローラが[Authorize]属性を使用する必要があります

  2. Webアプリケーション/ WebサイトのIISが両方匿名認証Windows認証が設定されていることを確認します。これは、すべて共通のコントローラクラス(BaseController/BaseApiControllerなど)から継承すると簡単に達成できます。例えば:

    [Authorize] 
    public class BaseController : System.Web.Mvc.Controller 
    { 
    
    } 
    
    
    [Authorize] 
    public class BaseApiController : System.Web.Http.ApiController 
    { 
    
    } 
    
  3. 匿名ことになっているすべてのアクションに[AllowAnonymous]属性を追加します。例えば:

    [RoutePrefix("Api/Anonymous")] 
    [Authorize] 
    public class AnonymousController : ApiController 
    { 
        [HttpGet] 
        [Route("GetServiceStatus")] 
        [AllowAnonymous] 
        public string GetServiceStatus() 
        { 
         return "OK"; 
        } 
    } 
    
関連する問題