我有一个使用组织身份验证(Azure AD)的MVC5,EF6应用程序,除了一件事以外一切正常。 WebAPI控制器需要处理来自未经身份验证的客户端的请求。客户端通常是发出AJAX请求的Android设备。
在我将组织身份验证添加到我的MVC应用程序之前,我的WebAPI控制器正在被调用并正常运行,所以我知道我的路由是正确的。现在我添加了组织身份验证,不再调用我的WebAPI控制器,并且客户端的AJAX请求超时。
我知道[Authorize]等属性可以指定对控制器/方法的访问权限,但在使用组织身份验证时,似乎没有调用没有[Authorize]属性的WebAPI控制器。
我的问题是,我可以将我的WebAPI控制器标记为允许来自未经身份验证的客户端的请求,如果是这样,我该怎么办?
非常感谢。
答案 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()
方法外,这将阻止用户未经授权访问所有方法。