You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure应用代理后ASP.Net Core证书认证403问题及调试咨询

ASP.NET Core API证书认证通过Azure应用代理报错403的排查方案

错误码说明

IIS日志里的403 0 0 9,本质是IIS拒绝了客户端证书请求。结合你的场景,核心问题大概率是Azure应用代理没把客户端证书传递到后端IIS——直通认证模式下,证书转发不是默认开启的。

第一步:开启Azure应用代理的证书转发

  1. 登录Azure门户,找到你的应用代理应用
  2. 进入「证书」配置页,启用「客户端证书转发」选项
  3. 确认应用代理连接器是最新版本,旧版本可能不支持证书转发功能

第二步:完善ForwardedHeaders配置(你之前加的代码的作用)

这段代码是让ASP.NET Core识别反向代理转发来的请求头(比如原始IP、协议),不直接处理证书,但能避免应用把代理请求当成恶意请求。建议补全配置:

builder.Services.Configure<ForwardedHeadersOptions>(options =>
{
    options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
    // 把Azure应用代理的IP加入可信代理列表,或者在可信环境下开启下面的选项
    options.AllowSyntheticProxies = true;
});

// 注意:必须在UseRouting之前调用UseForwardedHeaders
app.UseForwardedHeaders();
app.UseRouting();

第三步:VS Code调试的实用方法

1. 本地模拟代理场景调试

  • 用YARP(.NET反向代理工具)在本地模拟Azure应用代理的转发逻辑,配置YARP把请求转到你的本地API,同时添加证书转发规则
  • 在VS Code里启动应用,把断点打在证书认证中间件、请求管道的关键位置,通过YARP发请求,看断点是否触发,排查证书是否传递到应用

2. 远程调试IIS上的应用

  • 在Windows Server上安装微软远程调试工具,配置允许VS Code连接
  • 在VS Code里添加「.NET Core Launch (Remote)」配置,填好服务器IP和应用路径
  • 发请求后看断点是否触发,确认请求有没有到达应用层,以及客户端证书是否存在

3. 加日志排查细节

除了证书认证日志,加一段请求管道日志,记录请求到达情况和证书状态:

app.Use(async (context, next) =>
{
    var logger = context.RequestServices.GetRequiredService<ILogger<Program>>();
    logger.LogInformation("请求路径:{Path},客户端证书是否存在:{HasCert}", 
        context.Request.Path, context.Connection.ClientCertificate != null);
    await next();
});

把日志级别设为Debug,看请求是否真的到达应用,以及证书有没有被传过来

额外排查点

  • 检查IIS站点SSL设置:确保「要求SSL」启用,「客户端证书」设为「接受」或「要求」(根据你的认证规则)
  • 确认客户端证书在服务器的受信任根证书存储里,避免证书链验证失败
  • 看Azure应用代理连接器的日志(默认路径C:\Program Files\Microsoft AAD App Proxy Connector\Trace),有没有证书转发相关的错误

内容的提问来源于stack exchange,提问作者Stephan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 07:22:37