60

新しい ASP.NET Web API ベータ版の使用。ユーザーを認証するための提案された方法を機能させることができないようです。提案されたアプローチがあるように思われる場合は、[Authorize]フィルターを API コントローラーに追加します。例えば:

[Authorize] 
public IEnumerable<Item> Get()
{
    return itemsService.GetItems();
}

ただし、これは意図したとおりには機能しません。リソースをリクエストすると、ログイン フォームにリダイレクトされます。これは RESTful WebAPI にはあまり適していません。

これをどのように進める必要がありますか?将来のバージョンでは動作が異なりますか? または、独自のアクション フィルターの実装にフォールバックする必要がありますか?

4

8 に答える 8

96

System.Web.Http.AuthorizeAttributeを使用していて、を使用していないことを再確認してくださいSystem.Web.Mvc.AuthorizeAttribute。これは前に私を噛んだ。WebAPIチームがMVCユーザーに馴染みのあるものにするためにすべてをまとめようとしていることは知っていますが、何かが不必要に混乱していると思います。

于 2012-03-02T23:34:11.970 に答える
4

認証モードをNoneに設定します。

<authentication mode="None" />

なし認証なしを指定します。アプリケーションが匿名ユーザーのみを想定しているか、アプリケーションが独自の認証を提供しています。

http://msdn.microsoft.com/en-us/library/532aee0e.aspx

もちろん、ヘッダーやトークンなどを介して何らかの認証を提供する必要があります。Windowsを指定して、ヘッダー経由で組み込みの認証を使用することもできます。

このサイトがForms設定を必要とする API と実際のページと混在している場合は、独自の処理を記述する必要があります。

属性はインスタンスを返すHttpUnauthorizedResultだけで、リダイレクトは属性の外部で行われるため、問題ではなく、認証プロバイダーです。

于 2012-03-02T13:13:56.237 に答える
3

最後に、 ASP.NET MVC 4 WebAPI 認証で解決策を見つけました。

この記事では、この問題を解決する方法を示します。

于 2012-03-14T13:46:32.517 に答える
2

フォーム認証モジュールがこれを自動的に行うため、ログイン ページにリダイレクトされています。その動作を取り除くには、Paul の提案に従ってフォーム認証を無効にします。より REST に適したアプローチを使用する場合は、HTTP 承認サポートの実装を検討する必要があります。このブログ投稿をご覧ください http://www.piotrwalat.net/basic-http-authentication-in-asp-net-web-api-using-membership-provider/

于 2012-05-21T09:45:04.700 に答える
1

ASP.NET 5 では、 MVC と Web API コントローラーの両方を保護できる新しいMicrosoft.AspNet.Authorizationシステムが導入されました。

詳細については、こちらの関連​​する回答を参照してください。

アップデート:

2年前の当時はMicrosoft.AspNetCore.Authorizationでした。

@Chris Hainesが指摘したように。現在は Microsoft.AspNetCore.Authorization にあります。

.NET Core 1.0 から 2.0 まで、多くの名前空間が移動されたと思います。また、.net クラシックとコアの間の拡張機能はあいまいでした。これが、Microsoft が .net 標準を導入した理由です。

.net 標準

于 2016-02-15T10:54:29.020 に答える
0

ロールを使用している場合は、スペルが正しいことを確認してください。

あなたの役割が「管理者」と呼ばれる場合、これは機能しません:

    [System.Web.Http.Authorize(Roles = "Administator")]

これもありません:

    [System.Web.Http.Authorize(Roles = "Administrators")]

おっとっと...

于 2015-11-22T23:22:46.973 に答える
0

また、私の回答を見てください: ASP.NET Web API をセキュリティで保護する方法

私が作成した NuGet パッケージがあり、便利に使用できます。

于 2013-05-20T03:55:32.257 に答える