我们的ASP .Net Core(Razor)应用程序托管在AWS中,并放置在LoadBalancer(https)之后。我知道在LoadBalancer中URL总是不安全的错误。重写规则如此处所述被撤销:https://stackoverflow.com/a/46719766/3835956
但是我们使用Azure身份验证连接到我们的Active Directory,转发(回复url)将始终重定向到不安全的http地址。好的,该URL将被重写为https,但是在短时间内将调用http地址,并且该过程是不安全的。 我必须将带有http和https的URL添加到Azure应用程序属性中的答复URL列表中。
以这种方式配置身份验证:
public void ConfigureServices(IServiceCollection services)
{
[...]
services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
.AddAzureAD(options => Configuration.Bind("AzureAd", options));
services.AddMvc(options =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
options.Filters.Add(new AuthorizeFilter(policy));
})
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
[...]
// Fix for AWS LoadBalancer to rewrite url back to https
// https://stackoverflow.com/a/46719766/3835956
var options = new RewriteOptions()
.AddRedirectToProxiedHttps()
.AddRedirect("(.*)/$", "$1"); // remove trailing slash
app.UseRewriter(options);
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseSession();
app.UseAuthentication();
app.UseMvc();
}
Azure应用程序中的答复URL列表目前为:
是否有技巧将Azure指向正确的答复URL?非常感谢。
更新1:
appsettings.json看起来像这样:
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"Domain": "domain.com",
"TenantId": "abc-123",
"ClientId": "abc-123",
"CallbackPath": "/signin-oidc"
},
[...]
"AllowedHosts": "*"
}
答案 0 :(得分:0)
我陷入了与您相同的问题,然后我找到了此文档: https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/proxy-load-balancer?view=aspnetcore-3.1#scenarios-and-use-cases
然后在方法顶部添加以下内容:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.Use((context, next) =>
{
context.Request.Scheme = "https";
return next();
});
// other stuff omitted
}
它解决了问题。重定向URL现在是HTTPS。