tl; dnr По сути, мое приложение работало нормально до реализации общего cookie.Теперь у меня есть бесконечный цикл перенаправления входа в систему.Я часами копался в настройках файлов cookie, проводил локальное тестирование, развертывание в Azure и отказы.Как я могу принудительно установить HTTPS в службе приложений Azure?
Как и многие другие, я столкнулся с проблемой бесконечного цикла входа в систему.Мое приложение работало нормально с ASP.net Core 2.2 (в Dot Net 4.7.1), а затем я перешел к «общему файлу Auth».В разработке все отлично работает с localhost, но как только я публикуюсь в службе приложений Azure (домен .azurewebsites.net), я получаю бесконечный цикл перенаправления входа в систему.
Для начала, используя AzureKey Vault, я настроил службы «Защита данных», следуя этим инструкциям ссылка .и установите мой общий 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 настроена для доступа HTTPS в параметрах "Пользовательские домены" и "Настройки SSL".
На основании всех постов, с которыми я столкнулся, я понимаю, что основная проблема, возможно, связана с перенаправлением HTTPS с конечных точек Azure ADB2C, а общий файл cookie не сохраняется / читается должным образом.Обратный прокси-сервер отбрасывает HTTPS и вызывает только HTTP.Я просто не могу понять, какая комбинация должна работать.Я использую хост OutofProcess, и я вижу, что внутренние вызовы HTTP.Как я могу сделать так, чтобы они были HTTPS?
Стороннее примечание: я также пытался изменить домены cookie Correlation или Nonce, но это приводило к ошибкам Correlation.
TIA, любое указание направления было быпризнателен.
Краткий список сообщений, на которые я ссылался: