Azure Ad 身份验证回复 url 包含 http 而不是带有 .netcore 中间件的 https - 如何强制执行 https?

Azure Ad authentication reply url contains http instead of https with .netcore middleware - how to enforce https?

注意 http 而不是 https。当我用 https 替换 http 时,我被重定向并成功接收到不记名令牌。如何强制中间件生成的 url 包含 https?

中间件:

   services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
        .AddAzureAD(options => Configuration.Bind("AzureAd", options));

重定向时创建的请求:

https://login.microsoftonline.com/6957e{...}825/oauth2/authorize?
    client_id=747{...}9810&redirect_uri=http%3A%2F%2F {... continued url ...}

根据 Microsoft 文档,您应该使用 UseHttpsRedirection 来实现此目的:

  • The HTTPS Redirection Middleware (UseHttpsRedirection) to redirect all HTTP requests to HTTPS.

ASP.NET Core Enforce HTTPS

.UseHttpsRedirection() 将发出从 http 重定向到 https 的 HTTP 响应代码。

我能够通过 Stef Heyenrath 在 Whosebug 上添加的评论解决我的问题 post:

第 1 步:配置 ForwardedHeadersOptions

services.Configure<ForwardedHeadersOptions>(options =>
{
    options.RequireHeaderSymmetry = false;
    options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;

    // TODO : it's a bit unsafe to allow all Networks and Proxies...
    options.KnownNetworks.Clear();
    options.KnownProxies.Clear();
});

第 2 步:在 public void Configure(IApplicationBuilder app,

中使用 ForwardedHeaders
IHostingEnvironment env) method

app.UseForwardedHeaders();

第 3 步:仅将 UseHttpsRedirection 用于生产

if (env.IsDevelopment())
{
    app.UseDeveloperExceptionPage();

    // Forward http to https (only needed for local development because the Azure Linux App Service already enforces https)
    app.UseHttpsRedirection();
}
else
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

对于使用 docker 并部署到 Azure 应用服务的人: 在您的 DockerFile 中添加以下内容: 环境 ASPNETCORE_FORWARDEDHEADERS_ENABLED=真

原来 AAD 重定向 uri 被设置为 http 而不是 https