使用ADB2C和共享的Auth Cookie在Azure App Service上获得无限重定向循环

时间:2019-02-13 23:27:51

标签: azure cookies azure-ad-b2c

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,任何指向方向的方法都将不胜感激。

我引用的帖子的简短列表:

1 个答案:

答案 0 :(得分:0)

一段时间后,我研究了配置并从头开始创建了一个测试应用程序……我遇到了以下帖子:

ASP.NET Core Sharing Identity Cookie across azure web apps on default domain (*.azurewebsites.net)

我目前的假设是这确实是罪魁祸首,我今晚将使用我的一个自定义域尝试新的测试,然后看看会发生什么。