Azure回复URL始终在AWS LoadBalancer之后是不安全的

时间:2018-08-09 06:26:26

标签: amazon-web-services azure razor asp.net-core load-balancing

我们的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 Application reply urls

是否有技巧将Azure指向正确的答复URL?非常感谢。

更新1:

appsettings.json看起来像这样:

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "Domain": "domain.com",
    "TenantId": "abc-123",
    "ClientId": "abc-123",
    "CallbackPath": "/signin-oidc"
  },
  [...]
  "AllowedHosts": "*"
}

1 个答案:

答案 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。