首页 文章

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

提问于
浏览
1

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

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

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

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

非常感谢 .

2 回答

  • 4

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

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

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

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

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

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

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

    [AllowAnonymous]
    public class MyApiController : ApiController
    {
    }
    

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

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

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

相关问题