使用新的ASP.NET Web API测试版。我似乎无法获得建议的用户身份验证方法。建议的方法似乎是,将[Authorize]
过滤器添加到API控制器。例如:
[Authorize]
public IEnumerable<Item> Get()
{
return itemsService.GetItems();
}
但这并不像预期的那样有效。请求资源时,您将被重定向到登录表单。哪个不适合RESTful webapi。
我该如何处理?它在未来的版本中会有不同的用途吗?或者我应该回到实现自己的动作过滤器?
答案 0 :(得分:93)
仔细检查您使用的是System.Web.Http.AuthorizeAttribute
而不是System.Web.Mvc.AuthorizeAttribute
。这个比特我以前。我知道WebAPI团队正试图将所有内容整合在一起,以便MVC用户熟悉它,但我认为有些事情是不必要的混淆。
答案 1 :(得分:4)
将您的身份验证模式设置为无:
<authentication mode="None" />
无指定不进行身份验证。您的应用程序只需要匿名用户或应用程序提供自己的身份验证。
http://msdn.microsoft.com/en-us/library/532aee0e.aspx
当然,您必须通过标头或令牌或其他东西提供某种身份验证。您还可以指定 Windows 并使用内置的auth via标头。
如果此网站在API和需要表单设置的实际网页之间混合,那么您需要编写自己的处理。
所有属性都返回一个HttpUnauthorizedResult
实例,重定向是在属性之外完成的,所以它不是问题,它是你的身份验证提供者。
答案 2 :(得分:3)
最后,我找到了一个解决方案: ASP.NET MVC 4 WebAPI authorization
本文介绍如何解决此问题。
答案 3 :(得分:2)
您正被重定向到登录页面,因为表单身份验证模块会自动执行此操作。要摆脱这种行为,请按照Paul的建议禁用表单身份验证。 如果要使用更多REST友好方法,则应考虑实施HTTP授权支持。 请查看此博文http://www.piotrwalat.net/basic-http-authentication-in-asp-net-web-api-using-membership-provider/
答案 4 :(得分:1)
ASP.NET 5引入了新的 Microsoft.AspNet.Authorization 系统,该系统可以保护两个 MVC和Web API控制器。
For more see my related answer here.
<强>更新强>
2年前的那个时候,它是Microsoft.AspNetCore.Authorization。
@Chris Haines指出。现在它存在 Microsoft.AspNetCore.Authorization。
从.NET核心1.0到2.0,我认为已经移动了许多名称空间。 并且.net经典和核心之间的传播功能是模糊的。 这就是微软推出.net标准的原因。
答案 5 :(得分:0)
另外,看看我的回答: How to secure an ASP.NET Web API
我创建了一个NuGet包,您可以方便地使用它。
答案 6 :(得分:0)
如果您正在使用角色,请确保拼写正确:
如果您的角色被称为“管理员”,那么这个 - 例如将不起作用:
[System.Web.Http.Authorize(Roles = "Administator")]
这也不会:
[System.Web.Http.Authorize(Roles = "Administrators")]
糟糕...
答案 7 :(得分:0)
1,,gabriel,xyz_ltd,
2,,christian,abc_ltd,
1,,andrew,,UK
4,,mark,,France
使用
[授权(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
使用身份验证类型
进行过滤