tl; dnr 本质上,我的应用在实现共享Cookie之前运行良好。现在,我有一个无限的登录重定向循环。我花了好几个小时来研究cookie配置,本地测试,部署到Azure以及失败。如何在Azure App Service中强制使用HTTPS?
和其他许多人一样,我遇到了无限登录循环问题。我的应用程序在ASP.net Core 2.2(在Dot Net 4.7.1上)上运行良好,然后移至“共享的Auth cookie”。在开发中,一切都可以从localhost正常运行,但是一旦发布到Azure应用服务(.azurewebsites.net域),我就会遇到无限的登录重定向循环。
要开始使用Azure Key Vault进行操作,我按照以下说明link设置了“数据保护”服务。 并为所有应用程序设置我的共享Cookie:
services.AddDataProtection()
.SetApplicationName("custom-app")
.PersistKeysToAzureBlobStorage(cloudStorageAccount, azureBlobKeyStoragePath)
.ProtectKeysWithAzureKeyVault(keyVault, clientId, clientSecret);
var authCookie = new CookieBuilder() {
Name = ".AspNetCore.Auth.SharedCookie",
Path = "/",
Domain = ".mycustomdomain.com",
SecurePolicy = CookieSecurePolicy.SameAsRequest, // tried None as well without luck
SameSite = SameSiteMode.None, // I've tried Lax without any changes
HttpOnly = false,
IsEssential = true //changing this makes no difference
};
services
.AddAuthentication(sharedOptions => {
sharedOptions.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
sharedOptions.DefaultAuthenticateScheme = OpenIdConnectDefaults.AuthenticationScheme;
sharedOptions.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddAzureAdB2C(options => configuration.Bind("AzureAdB2C", options))
.AddCookie(options => { options.Cookie = authCookie; });
...
var corsOrigins = new[] {
"http://localhost",
"https://localhost",
"http://*.mycustomdomain.com",
"https://*.mycustomdomain.com",
"http://*.azurewebsites.net",
"https://*.azurewebsites.net",
"https://*.onmicrosoft.com",
"https://login.microsoftonline.com"
};
app.UseCors(cors => {
cors.WithOrigins(corsOrigins)
.SetIsOriginAllowedToAllowWildcardSubdomains()
.AllowCredentials();
cors.AllowAnyHeader();
cors.AllowAnyMethod();
});
除了配置“数据保护”服务和其他CORS域外,没有对应用程序代码进行任何其他更改。
我的应用程序已配置为使用HTTPS ... https://docs.microsoft.com/en-us/aspnet/core/security/enforcing-ssl?view=aspnetcore-2.2
...
app.UseHsts();
...
app.UseHttpsRedirection();
...
我还验证了我的Azure App Service是否已在“自定义域”和“ SSL设置”选项上设置为进行HTTPS访问。
根据我遇到的所有帖子,我了解到主要问题可能与从Azure ADB2C终结点重定向HTTPS和共享cookie无法正确存储/读取有关。反向代理将丢弃HTTPS,仅调用HTTP。我似乎无法弄清楚哪种组合应该有效。我正在使用OutofProcess主机,并且可以看到内部调用是HTTP。我怎样才能使它们成为HTTPS?
侧面说明:我也尝试过更改Correlation或Nonce Cookie域,但这会导致Correlation错误。
TIA,任何指向方向的方法都将不胜感激。
我引用的帖子的简短列表:
答案 0 :(得分:0)
一段时间后,我研究了配置并从头开始创建了一个测试应用程序……我遇到了以下帖子:
ASP.NET Core Sharing Identity Cookie across azure web apps on default domain (*.azurewebsites.net)
我目前的假设是这确实是罪魁祸首,我今晚将使用我的一个自定义域尝试新的测试,然后看看会发生什么。