.NET Core应用经Azure应用代理外部访问IIS出现403禁止错误排查
针对你遇到的问题,.NET Core应用相比传统.NET MVC应用,确实需要额外调整一些配置才能适配Azure应用代理,以下是具体的排查和配置要点:
配置转发头处理
Azure应用代理会通过X-Forwarded-For、X-Forwarded-Proto等头传递客户端真实IP和请求协议,.NET Core默认不会自动信任这些头,导致应用无法正确识别请求来源,进而引发访问限制。你需要在Program.cs中添加转发头中间件配置:builder.Services.Configure<ForwardedHeadersOptions>(options => { options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto; // 将Azure应用代理的IP地址加入信任列表,避免被拦截 options.KnownProxies.Add(IPAddress.Parse("你的Azure应用代理IP")); }); // 注意:此中间件必须放在UseAuthentication、UseRouting之前 app.UseForwardedHeaders();调整IIS身份验证设置
确保IIS站点上的.NET Core应用已启用匿名身份验证,同时禁用Windows身份验证等其他方式。因为Azure应用代理会先完成用户身份验证,再将请求转发到内部应用,内部应用不需要再做身份验证,否则会出现双重验证冲突。设置应用Base Path(如果有路径映射)
如果Azure应用代理配置了外部访问路径(比如https://your-domain.com/core-app对应内部http://iis-server/core-app),你需要在.NET Core应用中指定BasePath,确保路由匹配正确:app.UsePathBase("/core-app");验证内部URL的可达性
确认Azure应用代理的连接器服务器能直接访问.NET Core应用的内部URL,包括协议(http/https)、端口、路径是否完全正确。有些.NET Core应用可能依赖特定端口或子路径,需确保内部URL和应用实际运行的地址完全匹配。处理SSL证书信任问题
如果内部应用使用HTTPS,要将内部服务器的SSL证书导入到连接器服务器的受信任根证书存储中,避免连接器因证书不被信任而无法转发请求。同时,若应用强制HTTPS,需确保转发头配置能正确识别X-Forwarded-Proto头,避免重定向循环。查看Azure日志定位具体错误
登录Azure门户,找到对应的企业应用,查看审核日志和登录日志,里面会有具体的错误代码和原因,比如身份验证失败、资源未找到等,能帮你快速定位问题根源。
内容的提问来源于stack exchange,提问作者SkipFeeney

