14

我正在尝试在我的 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 版中的错误?

4

2 回答 2

31

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

也就是说,因为namespace System.Web.Http.AuthorizeAttribute是从 派生的AuthorizationFilterAttribute。过滤器由 Web API 自动处理。在我自己的实现中,我直接派生自AuthorizationFilterAttribute处理基本 HTTP 身份验证。

于 2012-02-28T14:50:36.887 回答
4

我已经为基本授权构建了自己的自定义实现:

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

也许这有帮助。

于 2012-04-26T07:07:29.223 回答