2012-02-28 62 views
14

Web APIコントローラーでカスタム許可属性を実装しようとしましたが、予期しない動作が発生しました。ASP.NET Web APIのカスタムMVC AuthorizeAttribute

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

は、上記のコードは非常によく動作します。それは、ボットの誰も他に許可されているアクセス「myuserの」は、アイテムを取得することができます。ただし、私のカスタム認証で同じアプローチを試すと、チェック全体がスキップされ、どのユーザーもそのリソースにアクセスできます。派生クラス内のAuthorizeCoreOnAuthorizationのオーバーライドされたメソッドは呼び出されません。

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

派生クラスがSystem.Web.Mvc.AuthorizeAttributeから継承し、プロジェクトが有効Windows認証 & 偽装して、IIS上で展開され、そして匿名認証無効。

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

答えて

31

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

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

+0

ありがとうございました。 Web APIのために働いた 'System.Web.Mvc.AuthorizeAttribute'を使うと、まったく変わったようですが、そのクラスから派生した私のクラスはそうではありませんでした。 –

+1

MVCとWeb APIの間には多くの型が重複しているようです。多分それらは合併されるでしょう、そして、我々はリリースでタイプの単一のサンプルを持っています。だから、おそらく 'AuthorizeAttibute'オブジェクトのどちらかが内部的にチェックされているだけです。 –

関連する問題