【发布时间】: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-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 部分的身份验证中间件 -
您找到解决方案了吗?我们在这里遇到了同样的问题。
标签: amazon-web-services azure razor asp.net-core load-balancing