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

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

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

据我所知,[Authorize]等属性指定了对控制器/方法的访问权限,但在使用组织认证时,似乎没有调用没有[Authorize]属性的WebAPI控制器 .

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

非常感谢 .

回答(2)

3 years ago

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

如果您的控制器被称为“PersonController”,那么您应该在path属性中输入的名称是“person”而不是“personcontroller” .

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

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

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

3 years ago

如果要允许匿名访问,可以使用 [AllowAnonymous] 属性 .

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

[AllowAnonymous]
public class MyApiController : ApiController
{
}

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

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

    }
}

当用户未被授权时,这将阻止对所有方法的访问,除了可以匿名调用的 GetData() 方法 .