#c# #azure-active-directory #single-sign-on
#c# #azure-active-directory #единый вход
Вопрос:
Новый веб-сайт, использующий единый вход Azure AD для аутентификации и авторизации, вызывает бесконечный цикл после успешного входа в систему на устройствах iOS (браузеры Safari / Chrome). Вход в систему отлично работает на устройствах Android, Win10 и Linux с использованием браузеров FireFox, Chrome и Edge.
Проблема остается постоянной, и я могу легко воспроизвести ее, выполнив следующие шаги:
- Пользователь удаляет всю историю из браузера (очистка, чтобы начать с чистого листа)
- Пользователь переходит на веб-сайт, перенаправляется на login.microsoftonline.com для входа в систему, из-за атрибута авторизации
- Пользователь входит в систему и перенаправляется обратно на веб-сайт. Теперь пользователь вошел в систему.
- Вот тут-то и становится странно. Если пользователь обновляет страницу, которая является корневой страницей (‘/’), пользователь теперь выполняет бесконечный цикл на login.microsoftonline.com . Примерно через 10-15 секунд на странице единого входа Microsoft сообщается, что не удается войти пользователю на веб-сайт.
- Если пользователь переходит на веб-сайт вручную, введя его URL-адрес, веб-сайт загружается нормально, и пользователь входит в систему.
- Если пользователь закрывает веб-сайт и снова открывает его через некоторое время, скажем, через 15 минут, пользователь снова застревает в бесконечном цикле. Ручной переход на веб-сайт после получения сообщения «не удается войти в систему» показывает, что пользователь снова вошел в систему, что означает, что проверка подлинности и авторизация работают.
(шаги 4 и 5 можно пропустить, это просто ускоряет отладку при отображении ошибки на шаге 4)
Вопрос в том, почему веб-сайт застревает в бесконечном цикле входа в систему? И почему это происходит только в продуктах iOS (с использованием Safari / Chrome)?
Что я пробовал до сих пор:
- Старые проблемы показывают, что в iOS 12 были проблемы с файлами cookie. Попытка привести примеры, предложенные этими решениями, включая ответ от команды MS Azure AD, не устраняет мои проблемы. Мои тестовые устройства используют iOS 15 с Safari 14.x.
- Я удалил «Роли» — часть атрибута авторизации веб-сайтов, предполагая, что это может быть проблемой, связанной с ролями, но это тоже не исправило.
- Обновление пакетов NuGet до последней версии (.NET 5.0.12, Microsoft.Идентификация.Веб 1.21.0).
Веб-сайт использует следующий пример в качестве источника; Однако я не тестировал его, та же проблема существует с использованием самого примера. Используемый пример реализации (образец AzureAD)
// appsettings.json:
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"Domain": "mydomain.com",
"TenantId": "xxxxxx",
"ClientId": "yyyyyyy",
"CallbackPath": "/signin-oidc",
"SignedOutCallbackPath": "/signout-callback-oidc"
},
// StartUp.cs:
services
.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApp(configuration => Configuration.Bind("AzureAd", configuration));
services
.AddControllersWithViews(options =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
options.Filters.Add(new AuthorizeFilter(policy));
})
// Maintain property names during serialization. See:
// https://github.com/aspnet/Announcements/issues/194
.AddJsonOptions(options =>
{
options.JsonSerializerOptions.PropertyNamingPolicy = null;
});
services
.AddRazorPages()
.AddMicrosoftIdentityUI();