Azure 回复 url 在 AWS 负载均衡器后面总是不安全
Posted
技术标签:
【中文标题】Azure 回复 url 在 AWS 负载均衡器后面总是不安全【英文标题】:Azure reply url is always unsecure behind AWS LoadBalancer 【发布时间】:2019-01-16 12:19:48 【问题描述】:我们的 ASP .Net Core (Razor) 应用程序托管在 AWS 中并放置在 LoadBalancer (https) 之后。我知道有一个错误,即 LoadBalancer 的 URL 总是不安全的。重写规则被集成,如下所述:https://***.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://***.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-Proto
和X-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 部分的身份验证中间件
您找到解决方案了吗?我们在这里遇到了同样的问题。
【参考方案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。
【讨论】:
以上是关于Azure 回复 url 在 AWS 负载均衡器后面总是不安全的主要内容,如果未能解决你的问题,请参考以下文章
AWS Cloudfront + 负载均衡器,url 从主域更改为负载均衡器子域