在Azure应用服务论坛中发布了此消息,但没有任何回应,因此...
框架为4.7.1
应用程序是带有两个Web API控制器的ASP.Net Web表单。
网站和HealthCheck控制器应允许匿名请求。
另一个控制器应使用证书作为凭据通过Azure Active Directory进行身份验证。
App Service中的身份验证设置为
唯一的问题是,当匿名请求命中安全控制器时,将返回HTTP 404而不是401。
如果发出了经过身份验证的请求,则返回HTTP 200。 我是否缺少某些配置设置?
这是Application_Start中Global.asax.cs中的路线图
RouteTable.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = System.Web.Http.RouteParameter.Optional }
);
这是authorization.json文件
{
"routes": [{
"path_prefix": "/",
"policies": { "unauthenticated_action": "AllowAnonymous" }
},
{
"path_prefix": "/api",
"policies": { "unauthenticated_action": "RejectWith401" }
},
{
"http_methods": [ "GET"],
"path_prefix": "/api/HealthCheck",
"policies": { "unauthenticated_action": "AllowAnonymous" }
}]
}
答案 0 :(得分:0)
您的文件authorization.json必须存在问题。除此/api
之外,还有其他子目录吗?也尝试添加它们,并在/api/(*whatever path*)
中添加path_prefix
。
答案 1 :(得分:0)
问题是表单身份验证重定向检测到401,并试图重定向到在forms元素的loginUrl属性中未正确指定的登录页面。 global.aspx.cs文件的Application_BeginRequest中的这段代码解决了我的问题
var context = new HttpContextWrapper(Context);
// set flag only if forms auth enabled and request comes from ajax
if (FormsAuthentication.IsEnabled && context.Request.Url.AbsolutePath.StartsWith("/api",StringComparison.CurrentCultureIgnoreCase))
{
context.Response.SuppressFormsAuthenticationRedirect = true;
}
在Azure中打开详细日志记录(由Microsoft建议)表明,身份验证正在返回401。那时,我知道正在发生重定向,并且它很可能构成身份验证。此链接还帮助我找出了解决方法