Asp.net-Mvc-4

ASP.NET Web API 的自定義 MVC AuthorizeAttribute

  • February 12, 2016

我正在嘗試在我的 Web API 控制器上實現自定義授權屬性,但遇到了意外行為。

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

上面的程式碼工作得很好:它將允許*“myUser”*檢索項目,機器人沒有其他人被允許訪問。但是,當我使用自定義授權嘗試相同的方法時,會跳過整個檢查,並且任何使用者都可以訪問該資源。我的派生類中的 theAuthorizeCore和覆蓋的方法都沒有被呼叫。OnAuthorization

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

派生類繼承自System.Web.Mvc.AuthorizeAttribute,項目部署在 IIS 上,啟用Windows 身份驗證模擬,禁用匿名身份驗證

如果我將相同的自定義授權添加到 MVC 控制器,那麼它可以工作。但在 API 控制器上,什麼都沒有。如果該Authorize屬性也不起作用,那將更有意義。我錯過了什麼嗎?這是預期的行為,還是 Beta 版中的錯誤?

您應該使用System.Web.Http.AuthorizeAttributeSystem.Web.Http.dll 的 Web API 而不是System.Web.Mvc.AuthorizeAttribute.

也就是說,因為namespace System.Web.Http.AuthorizeAttribute是從 派生的AuthorizationFilterAttribute。過濾器由 Web API 自動處理。在我自己的實現中,我直接派生自AuthorizationFilterAttribute處理基本 HTTP 身份驗證。

我已經為基本授權建構了自己的自定義實現:

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

也許這有幫助。

引用自:https://stackoverflow.com/questions/9482982