web-dev-qa-db-ja.com

アプリケーションの残りの部分がWindows認証で実行されている間、ASP.NET Web APIコントローラーへの匿名を許可します

Windows認証が有効になっているASP.NET Webアプリケーションがあります。アプリケーションのデータアクセスロジックの一部を使用するASP.NET Web APIコントローラーをそのアプリケーションで作成する必要があります。いくつかのリクエストを処理する小さなエンドポイントだけを公開する必要があるため、Web APIだけの新しいプロジェクトを作成したくありません。

Web APIクライアントはサービスを匿名で消費します。これを許可するために、コントローラとアクションの両方でAllowAnonymousアクションフィルタを使用してみました。しかし、Fiddlerを使用してAPIにアクセスしようとすると、「401-権限がありません:資格情報が無効なため、アクセスが拒否されました」というステータス401でリクエストが失敗します。

これを達成する方法はありますか?

11
S. Ravi Kiran

パーティーには少し遅れますが、匿名認証が有効になっていることを確認してください。それから加えて:

<configuration>
  ...
  <location path="api/...">
    <system.web>
      <authorization>
        <allow users="?"/>
      </authorization>
    </system.web>
  </location>
</configuration>

あなたのweb.configに。

私はあなたが持っていると仮定しています:

<system.web>
  ...
  <authentication mode="Windows" />
  <authorization>
    <deny users="?" />
  </authorization>
</system.web>

これでうまくいきました。

14
KiwiPiet

ええと-認証を必要とするすべてのコントローラーにはAuthorize属性が必要です(これはグローバルフィルターである可能性があります)-authNを必要としないコントローラーではAllowAnonymousを使用します。

次に、匿名認証がvdirのIIS=で有効になっていることを確認してください。また、web.configにグローバル認証要素がないことを確認してください。

8
leastprivilege

Visual Studio 2015と.NET 4.5.2を使用して問題を解決した方法は、Web APIプロジェクトプロパティをAnonymous AuthenticationWindows Authenticationの両方に設定することでした。 Enabled(これらもIISインスタンスで設定する必要があることに注意してください)次に、コントローラ内で[Authorize]属性とカスタム認証属性の名前による認証を必要とするメソッド。

これにより、コントローラーメソッドの既定の構成で匿名呼び出しを受け入れることができ、認証を必要とするいくつかの特別なメソッドのみに追加のデコレーターがありました。 web.configまたはWebApiConfig.csファイルに何も追加する必要はありませんでした。 Global.asaxには、グローバル値を設定するカスタム認証静的関数の呼び出しがありました。

2
cminus