带有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")]
糟糕!