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

Azure Kubernetes Service(AKS)中Azure AD身份验证跳转协议不符问题咨询

适配AKS部署的Azure AD回调协议错误解决方案

核心问题根源为AKS入口层做了SSL卸载后,后端Pod内应用读取到的请求协议为本地HTTP,未识别到原始请求的HTTPS协议,导致生成的回调地址不符合Azure AD配置要求。以下为两种生产级可行方案:

方案1:配置X-Forwarded-*头部体系(首推,云原生场景标准实践)

该方案通过标准化的反向代理转发头传递原始请求属性,无需硬编码域名,适配多环境部署。

  • 第一步:Ingress层配置转发规则
    若使用Nginx Ingress Controller,在对应Ingress资源添加以下注解开启转发头传递:
    annotations:
      nginx.ingress.kubernetes.io/ssl-redirect: "true"
      nginx.ingress.kubernetes.io/use-forwarded-headers: "true"
      nginx.ingress.kubernetes.io/proxy-set-headers: "X-Forwarded-Proto https"
    
    若使用Azure Application Gateway Ingress Controller(AGIC),默认已自动注入相关转发头,无需额外配置。
  • 第二步:应用层配置转发头信任
    针对使用Kestrel的ASP.NET Core应用,在启动类中添加转发头中间件配置,注意该中间件必须放在身份验证中间件之前注册:
    // 注册转发头配置
    builder.Services.Configure<ForwardedHeadersOptions>(options =>
    {
        options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
        // 可按需指定信任的代理IP段,清空则默认信任所有代理转发的头部
        options.KnownProxies.Clear();
    });
    
    // 中间件注册顺序必须放在最前端,优先读取转发头
    app.UseForwardedHeaders();
    // 后续再注册身份验证、路由等其他中间件
    
    配置完成后,应用会自动识别原始请求的HTTPS协议,生成的回调地址将自动匹配HTTPS前缀。

方案2:强制指定回调地址

该方案适合单域名固定部署场景,配置更简单直接:
直接在身份验证配置中硬编码回调地址,忽略本地请求协议的读取逻辑:

builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureAd"))
    .Configure<OpenIdConnectOptions>(options =>
    {
        options.Events.OnRedirectToIdentityProvider = context =>
        {
            // 直接替换为你在Azure AD中配置的完整HTTPS回调地址
            context.ProtocolMessage.RedirectUri = "https://mydomain/signin-oidc";
            return Task.CompletedTask;
        };
    });

两种方案均无需在Pod内部署SSL证书,证书统一在AKS入口层管理即可,避免了Pod内证书轮换、分发的运维成本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 06:24:03