14

Web API コントローラーにカスタム承認属性を実装しようとしていますが、予期しない動作に遭遇しました。

     <Authorize(Users:="myUser")>
     Public Function GetTodoItems() As IQueryable(Of TodoItem)

上記のコードは非常にうまく機能します。 「myUser」がアイテムを取得できるようにし、ボット以外の誰もアクセスを許可しません。ただし、カスタム承認で同じアプローチを試みると、チェック全体がスキップされ、すべてのユーザーがリソースにアクセスできます。AuthorizeCore派生クラスのメソッドもOnAuthorizationオーバーライドされたメソッドも呼び出されません。

     <MyAuth(Users:="myUser")>
     Public Function GetTodoItems() As IQueryable(Of TodoItem)

派生クラスは から継承されSystem.Web.Mvc.AuthorizeAttribute、プロジェクトは IIS に展開され、Windows 認証偽装が有効になり、匿名認証が無効になります。

同じカスタム認証を MVC コントローラーに追加すると、機能します。しかし、API コントローラーでは何もありません。属性も機能しない場合は、Authorizeより理にかなっています。何か不足していますか?これは予想される動作ですか、それともベータ版のバグですか?

4

2 に答える 2

31

System.Web.Http.AuthorizeAttributeの代わりに Web API の System.Web.Http.dll から使用する必要がありSystem.Web.Mvc.AuthorizeAttributeます。

つまり、 からnamespace System.Web.Http.AuthorizeAttribute派生したためですAuthorizationFilterAttribute。フィルターは、Web API によって自動的に処理されます。私自身の実装AuthorizationFilterAttributeでは、基本的な HTTP 認証を処理するために から直接派生しました。

于 2012-02-28T14:50:36.887 に答える
4

Basic Authorization の独自のカスタム実装を構築しました。

http://remy.supertext.ch/2012/04/basic-http-authorization-for-web-api-in-mvc-4-beta/

たぶんこれが役立ちます。

于 2012-04-26T07:07:29.223 に答える