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

ASP.NET Core对接Microsoft Graph时redirect_uri为http而非https如何解决

解决方案

1. 配置反向代理转发头(推荐,适配Linux部署常见架构)

绝大多数Linux环境下ASP.NET Core应用都会搭配Nginx/Apache等反向代理使用,外部HTTPS请求到达反向代理后,默认以HTTP协议转发给后端Kestrel服务,导致应用识别到的请求协议为HTTP,生成错误的redirect_uri。
你需要在应用中启用转发头中间件:

  • 首先在Program.cs(.NET 6+)的中间件管道最开头(UseAuthentication、UseAuthorization之前)添加如下代码:
builder.Services.Configure<ForwardedHeadersOptions>(options =>
{
    options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
    // 如果反向代理不在同一服务器,可添加代理IP到KnownProxies集合,生产环境按需配置允许的代理范围即可
    options.KnownProxies.Add(IPAddress.Parse("你的反向代理内网IP"));
});

var app = builder.Build();
// 转发头中间件必须放在最开头
app.UseForwardedHeaders();
// 后面再依次添加UseHttpsRedirection、UseRouting、UseAuthentication、UseAuthorization等其他中间件
  • 同时在你的反向代理配置中添加转发头规则,以Nginx为例,在站点配置的location段添加:
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $remote_addr;

2. 强制指定OpenIdConnect回调协议

如果不方便调整反向代理配置,可以直接在身份认证配置中强制redirect_uri使用HTTPS协议:
在添加Microsoft身份认证的代码后补充配置OpenIdConnect参数:

builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureAd"))
    .EnableTokenAcquisitionToCallDownstreamApi(initialScopes)
    .AddMicrosoftGraph(builder.Configuration.GetSection("MicrosoftGraph"))
    .AddInMemoryTokenCaches();

// 新增这段配置强制redirect_uri为HTTPS
builder.Services.Configure<OpenIdConnectOptions>(OpenIdConnectDefaults.AuthenticationScheme, options =>
{
    options.Events.OnRedirectToIdentityProvider = context =>
    {
        // 强制替换redirect_uri的协议为HTTPS
        var redirectUri = new UriBuilder(context.ProtocolMessage.RedirectUri);
        redirectUri.Scheme = "https";
        redirectUri.Port = -1; // 默认使用HTTPS标准端口443,如果你使用自定义HTTPS端口可自行修改
        context.ProtocolMessage.RedirectUri = redirectUri.ToString();
        return Task.CompletedTask;
    };
});

3. 辅助检查项

  • 确认Azure AD应用注册中的重定向URI配置的是完整的HTTPS地址:https://mysite/signin-oidc
  • 如果启用了HTTPS强制跳转,确认UseHttpsRedirection中间件的顺序在UseForwardedHeaders之后

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:12:05