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

ASP.NET Core OIDC反向代理下如何修改回调重定向URL?

解决方案:修复OIDC回调地址无法访问的问题

优先方案:在ASP.NET Core后端配置

核心问题是后端向身份提供商(IdP)发送的授权请求中,redirect_uri使用了后端server1的地址,导致IdP重定向到用户无法访问的https://server1:8081/signin-oidc。通过以下步骤修复:

  1. 配置转发头中间件
    ASP.NET Core需要识别反向代理传递的真实请求地址(server2的地址),在Program.cs中添加转发头配置:

    builder.Services.Configure<ForwardedHeadersOptions>(options =>
    {
        options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto | ForwardedHeaders.XForwardedHost;
        // 生产环境请替换为server2的实际IP或主机名,限制可信代理
        options.KnownProxies.Add(IPAddress.Parse("server2的IP地址"));
    });
    
    // 在UseRouting之前添加转发头中间件
    app.UseForwardedHeaders();
    
  2. 修正OIDC回调地址配置
    在OIDC中间件配置中,显式设置公开的回调地址(反向代理后的地址),同时确保IdP后台的回调地址与之一致:

    builder.Services.AddAuthentication(options =>
    {
        options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
        options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
    })
    .AddCookie()
    .AddOpenIdConnect(options =>
    {
        options.Authority = "你的IdP地址";
        options.ClientId = "客户端ID";
        options.ResponseType = "code";
        options.UsePkce = true;
        // 回调路径对应后端的路径,代理后变为https://server2/myApp/signin-oidc
        options.CallbackPath = "/signin-oidc";
        // 显式设置IdP重定向的完整地址
        options.RedirectUri = "https://server2/myApp/signin-oidc";
        options.PostLogoutRedirectUri = "https://server2/myApp/signout-callback-oidc";
        options.Scope.Add("openid");
        options.Scope.Add("profile");
        // 其他必要配置...
    });
    

    配置完成后,后端向IdP发送的授权请求会使用https://server2/myApp/signin-oidc作为redirect_uri,IdP重定向时会指向用户可访问的server2地址,再通过代理转发到后端处理。

备选方案:通过反向代理(IIS URL重写)修复

如果无法修改后端配置,可通过以下步骤调整代理规则:

  1. 更新IdP回调地址
    在IdP后台将回调地址修改为https://server2/myApp/signin-oidc,确保IdP重定向到用户可访问的地址。

  2. 添加IIS入站转发规则
    在server2的IIS URL重写模块中,添加新的入站规则:

    • 匹配URL模式:^myApp/signin-oidc$
    • 重写URL:https://server1:8081/signin-oidc
    • 确保启用ARR(Application Request Routing)模块,允许反向代理。
  3. 传递转发头信息
    在URL重写规则的“服务器变量”中,添加以下变量,确保后端能识别真实请求地址:

    • HTTP_X_FORWARDED_PROTO:设置为{HTTPS}(值为on时填https,否则http)
    • HTTP_X_FORWARDED_HOST:设置为{HTTP_HOST}
    • HTTP_X_FORWARDED_FOR:设置为{REMOTE_ADDR}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 00:50:01