使用Asp.Net Identity来保护WebApi控制器

时间:2016-01-30 19:49:06

标签: asp.net-web-api asp.net-identity

我正在使用Asp.Net Identity来保护我的应用程序。 Asp.Net Identity的配置包括对app.UseCookieAuthentication的标准调用。

然后我使用System.Web.Mvc.AuthorizeAttribute保护了一个MVC控制器(继承自System.Web.Mvc.Controller)并且它工作正常 - 登录用户可以使用MVC控制器并且不允许匿名用户。 / p>

我有另一个控制器,这次是WebApi控制器(继承自System.Web.Http.ApiController)。我试图以相同的方式保护它,即登录用户(使用MVC登录)可以调用它而匿名用户不能。我尝试使用相同的属性(System.Web.Mvc.AuthorizeAttribute),但在这种情况下,任何用户(即使未经授权)都可以调用控制器。如果我使用System.Web.Http.AuthorizeAttribute(对于WebApi控制器应该是正确的),则每个用户(甚至登录)都会收到错误。此请求已拒绝授权。

我想我必须以某种方式配置WebApi使用与MVC控制器相同的身份,但我找不到如何。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我找到了一个解决方案:使用System.Web.Http.AuthorizeAttribute然后使用值为DefaultAuthenticationTypes.ApplicationCookie的HostAuthenticationAttribute使WebApi使用应用程序cookie进行调用。控制器如下所示:

[Authorize]
[HostAuthentication(DefaultAuthenticationTypes.ApplicationCookie)]
public class TestController : ApiController
{
    ...
}