C# 我可以绕过MVC应用程序中WebAPI控制器的组织身份验证吗?
我有一个MVC5、EF6应用程序,它使用组织身份验证(Azure AD),除了一件事之外,其他一切都正常工作。WebAPI控制器需要处理来自未经验证客户端的请求。客户端通常是发出AJAX请求的Android设备 在我将组织身份验证添加到MVC应用程序之前,我的WebAPI控制器被正确调用和运行,因此我知道我的路由是正确的。现在我添加了组织身份验证,不再调用我的WebAPI控制器,客户端的AJAX请求超时 我知道有[Authorize]等属性可以指定对控制器/方法的访问权限,但在使用组织身份验证时,似乎不会调用没有[Authorize]属性的WebAPI控制器 我的问题是,我可以将我的WebAPI控制器标记为允许来自未经身份验证的客户端的请求吗?如果可以,我该怎么做C# 我可以绕过MVC应用程序中WebAPI控制器的组织身份验证吗?,c#,asp.net-mvc,authentication,azure,asp.net-web-api,C#,Asp.net Mvc,Authentication,Azure,Asp.net Web Api,我有一个MVC5、EF6应用程序,它使用组织身份验证(Azure AD),除了一件事之外,其他一切都正常工作。WebAPI控制器需要处理来自未经验证客户端的请求。客户端通常是发出AJAX请求的Android设备 在我将组织身份验证添加到MVC应用程序之前,我的WebAPI控制器被正确调用和运行,因此我知道我的路由是正确的。现在我添加了组织身份验证,不再调用我的WebAPI控制器,客户端的AJAX请求超时 我知道有[Authorize]等属性可以指定对控制器/方法的访问权限,但在使用组织身份验证时
非常感谢。如果您想允许匿名访问,可以使用
[AllowAnonymous]
属性
您可以将其添加到ApicController上方,以将整个控制器标记为匿名访问,如:
[AllowAnonymous]
public class MyApiController : ApiController
{
}
或者,您可以将此属性赋予特定方法,以允许匿名调用该方法:
[Authorize]
public class MyApiController : ApiController
{
[AllowAnonymous]
public string GetData()
{
}
}
当用户未经授权时,这将阻止对所有方法的访问,但可以匿名调用的
GetData()
方法除外。如果要允许匿名访问,可以使用[AllowAnonymous]
属性
您可以将其添加到ApicController上方,以将整个控制器标记为匿名访问,如:
[AllowAnonymous]
public class MyApiController : ApiController
{
}
或者,您可以将此属性赋予特定方法,以允许匿名调用该方法:
[Authorize]
public class MyApiController : ApiController
{
[AllowAnonymous]
public string GetData()
{
}
}
当用户未经授权时,这将阻止对所有方法的访问,但可以匿名调用的
GetData()
方法除外。答案是通过在根Web.config文件中输入下面的xml,允许匿名连接到特定控制器
如果控制器名为“PersonController”,则应在路径属性中输入的名称为“person”,而不是“PersonController”
在我的例子中,因为我希望允许对WebAPI控制器的匿名请求,所以我需要在path属性中的控制器名称前面加上“api/”
希望这能帮助其他可能遇到同样问题的人
<location path="api/my-controller-name">
<system.web>
<authorization>
<allow users="?" />
</authorization>
</system.web>
</location>
答案是通过在根Web.config文件中输入下面的xml,允许匿名连接到特定控制器 如果控制器名为“PersonController”,则应在路径属性中输入的名称为“person”,而不是“PersonController” 在我的例子中,因为我希望允许对WebAPI控制器的匿名请求,所以我需要在path属性中的控制器名称前面加上“api/” 希望这能帮助其他可能遇到同样问题的人
<location path="api/my-controller-name">
<system.web>
<authorization>
<allow users="?" />
</authorization>
</system.web>
</location>
谢谢,我尝试过这个方法,但在组织身份验证环境中不起作用。我认为问题发生在属性生效之前,因为如果我将WebAPI方法的URL粘贴到浏览器地址栏中,我会被重定向到Microsoft登录页面。谢谢,我尝试了此操作,但在组织身份验证上下文中无法工作。我认为问题发生在属性生效之前,因为如果我将WebAPI方法的URL粘贴到浏览器地址栏中,我会被重定向到Microsoft登录页面。您是否有任何授权处理程序负责web api应用程序中的授权?不,我没有。我找到了解决方案,它列在下面,但我还不能将其标记为正式答案,需要再等23个小时!解决方案是在web.config文件中添加一个位置条目。有关详细信息,请参阅答案。您是否有负责web api应用程序中授权的委托处理程序?没有。我找到了解决方案,它列在下面,但我还不能将其标记为正式答案,需要再等23个小时!解决方案是在web.config文件中添加一个位置条目。请参阅答案了解详细信息。我补充说,路由应包括api文件夹,控制器名称应放置在没有完整文件路径的位置。重塑者会建议你们更多…我补充说,路线应该涵盖api文件夹和控制器名称应该放在没有完整的文件路径。重塑者会建议你更多。。。