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.
.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
注意 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.
.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,
中使用 ForwardedHeadersIHostingEnvironment 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