【问题标题】:Azure reply url is always unsecure behind AWS LoadBalancerAzure 回复 url 在 AWS 负载均衡器后面总是不安全
【发布时间】:2019-01-16 12:19:48
【问题描述】:

我们的 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": "*"
}

【问题讨论】:

  • 我猜您的应用正在将 redirect_uri 指定为 HTTP 版本。必须以某种方式让应用意识到它的 URL 实际上是 HTTPS,即使它从负载均衡器接收作为 HTTP 的流量。
  • 请澄清:应用程序生成的url是http吗?还是只是 Proxy 和您的应用程序 http 之间的流量?后一个不是问题,只要X-Forwarded-ProtoX-Forwarded-For(或者是X-Forwarded-Host?)正确重定向到您的应用程序,您的应用程序仍会将连接视为安全的(身份验证和 RequireHttps 属性将否则重定向或失败)
  • 该站点的 url 是 http 并在使用 https 和公司域的负载均衡器后面生成。因此应用程序不知道负载均衡器的正确 url。应用程序和负载均衡器之间的流量应该是 http。 @Tseng 你的意思是交通安全吗?但我必须将 http url 添加到 azure 列表。
  • 介意发布(相关部分)您的 appsettings.json 吗?可能是您在那里将返回 url 设置为 http 吗?您正在此处加载内容.AddAzureAD(options => Configuration.Bind("AzureAd", options));,但我们看不到您在 appsettings.json 部分中的内容。返回 url 通常是硬编码的(配置或在 code9 部分的身份验证中间件
  • 您找到解决方案了吗?我们在这里遇到了同样的问题。

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


【解决方案1】:

我遇到了和你一样的问题,然后我找到了这个文档: 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。

【讨论】:

    猜你喜欢
    • 2017-08-09
    • 2014-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-09
    • 1970-01-01
    • 1970-01-01
    • 2014-12-18
    相关资源
    最近更新 更多