我可以绕过 MVC 应用程序内 WebAPI 控制器的组织身份验证吗?
Can I bypass organizational authentication for a WebAPI controller inside an MVC app?
我有一个使用组织身份验证 (Azure AD) 的 MVC5、EF6 应用程序,除一件事外一切正常。 WebAPI 控制器需要处理来自未经身份验证的客户端的请求。客户端通常是 Android 发出 AJAX 请求的设备。
在我向我的 MVC 应用程序添加组织身份验证之前,我的 WebAPI 控制器被调用并正常运行,所以我知道我的路由是正确的。现在我添加了组织身份验证,不再调用我的 WebAPI 控制器并且客户端的 AJAX 请求超时。
我知道有 [Authorize] 等属性来指定对 controllers/methods 的访问,但是在使用组织身份验证时,似乎没有调用没有 [Authorize] 属性的 WebAPI 控制器。
我的问题是,我可以将我的 WebAPI 控制器标记为允许来自未经身份验证的客户端的请求吗?如果可以,我该怎么做?
非常感谢。
如果您想允许匿名访问,您可以使用 [AllowAnonymous]
属性。
您可以将其添加到 ApiController 上方以将整个控制器标记为匿名访问,例如:
[AllowAnonymous]
public class MyApiController : ApiController
{
}
或者您可以为特定方法提供此属性,以允许匿名调用该方法:
[Authorize]
public class MyApiController : ApiController
{
[AllowAnonymous]
public string GetData()
{
}
}
这将在用户未获得授权时阻止对所有方法的访问,但可以匿名调用的 GetData()
方法除外。
答案是通过在根 Web.config 文件中输入下面的 xml 来允许匿名连接到特定的控制器。
如果您的控制器名为 "PersonController",那么您应该在路径属性中输入的名称是 "person" 而不是 "personcontroller".
在我的例子中,因为我想允许对 WebAPI 控制器的匿名请求,所以我需要在路径属性中为我的控制器名称添加前缀 "api/"。
希望这对可能 运行 遇到同样问题的其他人有所帮助。
<location path="api/my-controller-name">
<system.web>
<authorization>
<allow users="?" />
</authorization>
</system.web>
</location>
我有一个使用组织身份验证 (Azure AD) 的 MVC5、EF6 应用程序,除一件事外一切正常。 WebAPI 控制器需要处理来自未经身份验证的客户端的请求。客户端通常是 Android 发出 AJAX 请求的设备。
在我向我的 MVC 应用程序添加组织身份验证之前,我的 WebAPI 控制器被调用并正常运行,所以我知道我的路由是正确的。现在我添加了组织身份验证,不再调用我的 WebAPI 控制器并且客户端的 AJAX 请求超时。
我知道有 [Authorize] 等属性来指定对 controllers/methods 的访问,但是在使用组织身份验证时,似乎没有调用没有 [Authorize] 属性的 WebAPI 控制器。
我的问题是,我可以将我的 WebAPI 控制器标记为允许来自未经身份验证的客户端的请求吗?如果可以,我该怎么做?
非常感谢。
如果您想允许匿名访问,您可以使用 [AllowAnonymous]
属性。
您可以将其添加到 ApiController 上方以将整个控制器标记为匿名访问,例如:
[AllowAnonymous]
public class MyApiController : ApiController
{
}
或者您可以为特定方法提供此属性,以允许匿名调用该方法:
[Authorize]
public class MyApiController : ApiController
{
[AllowAnonymous]
public string GetData()
{
}
}
这将在用户未获得授权时阻止对所有方法的访问,但可以匿名调用的 GetData()
方法除外。
答案是通过在根 Web.config 文件中输入下面的 xml 来允许匿名连接到特定的控制器。
如果您的控制器名为 "PersonController",那么您应该在路径属性中输入的名称是 "person" 而不是 "personcontroller".
在我的例子中,因为我想允许对 WebAPI 控制器的匿名请求,所以我需要在路径属性中为我的控制器名称添加前缀 "api/"。
希望这对可能 运行 遇到同样问题的其他人有所帮助。
<location path="api/my-controller-name">
<system.web>
<authorization>
<allow users="?" />
</authorization>
</system.web>
</location>