我可以绕过MVC应用程序内的Web API控制器的组织身份验证吗?

时间:2015-01-27 09:37:06

标签: c# asp.net-mvc authentication azure asp.net-web-api

我有一个使用组织身份验证(Azure AD)的MVC5,EF6应用程序,除了一件事以外一切正常。 WebAPI控制器需要处理来自未经身份验证的客户端的请求。客户端通常是发出AJAX请求的Android设备。

在我将组织身份验证添加到我的MVC应用程序之前,我的WebAPI控制器正在被调用并正常运行,所以我知道我的路由是正确的。现在我添加了组织身份验证,不再调用我的WebAPI控制器,并且客户端的AJAX请求超时。

我知道[Authorize]等属性可以指定对控制器/方法的访问权限,但在使用组织身份验证时,似乎没有调用没有[Authorize]属性的WebAPI控制器。

我的问题是,我可以将我的WebAPI控制器标记为允许来自未经身份验证的客户端的请求,如果是这样,我该怎么办?

非常感谢。

2 个答案:

答案 0 :(得分:4)

答案是通过在根Web.config文件中输入以下xml来允许匿名连接到特定控制器。

如果您的控制器被调用" PersonController",那么您应该在路径属性中输入的名称是" person" NOT" personcontroller"。

在我的情况下,因为我想允许对WebAPI控制器的匿名请求,我需要在路径属性中使用" api /"前缀我的控制器名称。

希望这有助于其他可能遇到同样问题的人。

<location path="api/my-controller-name">
  <system.web>
    <authorization>
      <allow users="?" />
    </authorization>
  </system.web>
</location>

答案 1 :(得分:2)

如果您想允许匿名访问,可以使用[AllowAnonymous]属性。

你可以在ApiController上面添加它来标记整个控制器的匿名访问,如:

[AllowAnonymous]
public class MyApiController : ApiController
{
}

或者您可以为此属性指定一个特定方法,以允许匿名调用该方法:

[Authorize]
public class MyApiController : ApiController
{
    [AllowAnonymous]
    public string GetData() 
    {

    }
}

除了可以匿名调用的GetData()方法外,这将阻止用户未经授权访问所有方法。