带有AuthorizeAttribute的ASP.NET Web API授权

使用新的ASP.NET Web APItesting版。 我似乎无法得到authentication用户的build议方法,工作。 在build议的方法似乎是,将[Authorize]filter添加到API控制器。 例如:

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

这不符合预期的工作。 请求资源时,您将被redirect到login表单。 哪个不是很适合REST风格的webapi。

我应该如何继续? 在将来的版本中它会以不同的方式工作吗?还是应该回到实施我自己的操作filter?

仔细检查你使用的是System.Web.Http.AuthorizeAttribute而不是System.Web.Mvc.AuthorizeAttribute 。 这点我之前。 我知道WebAPI团队正在试图把所有的东西放在一起,这样MVC用户就很熟悉了,但是我认为有些东西是不必要的混淆。

将您的身份validation模式设置为

 <authentication mode="None" /> 

指定没有authentication。 您的应用程序只希望匿名用户或应用程序提供自己的身份validation。

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

当然,那么你必须提供某种通过标头或令牌的authentication。 你也可以指定Windows,并使用内置的validation通过头。

如果这个网站在API和需要表单设置的实际页面之间混合,那么您将需要编写自己的处理。

所有的属性都是返回一个HttpUnauthorizedResult实例,redirect是在属性之外完成的,所以它不是问题,它是你的authentication提供者。

最后,我find了一个解决scheme: ASP.NET MVC 4 WebAPI授权

本文将介绍如何解决此问题。

您正被redirect到login页面,因为表单validation模块会自动执行此操作。 为了摆脱这种行为,请按照Paul的build议禁用表单身份validation。 如果你想使用更多的REST友好的方法,你应该考虑实现HTTP授权支持。 看看这个博客文章http://www.piotrwalat.net/basic-http-authentication-in-asp-net-web-api-using-membership-provider/

ASP.NET 5引入了可以保护MVC和Web API控制器的新的Microsoft.AspNet.Authorization系统。

更多的在这里看到我的相关答案。

更新:

在2年前的那个时候,它是Microsoft.AspNetCore.Authorization。

正如@Chris Haines所指出的那样。 现在它驻留在Microsoft.AspNetCore.Authorization。

从.NET核心1.0到2.0,许多命名空间已经移动,我想。 .net classic和core之间的传播function是模糊的。 这就是微软推出.net标准的原因。

.net标准

另外,请看我的答案: 如何保护ASP.NET Web API

有一个我已经创build的NuGet包,你可以使用它来方便。

如果您使用angular色,请确保您拼写正确:

如果你的angular色被称为“pipe理员”,那么这 – 例如不会工作:

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

这也不是:

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

糟糕!