Единый вход с использованием Azure AD на iOS (Safari / Chrome) вызывает бесконечный цикл входа (.NET 5, C #)

#c# #azure-active-directory #single-sign-on

#c# #azure-active-directory #единый вход

Вопрос:

Новый веб-сайт, использующий единый вход Azure AD для аутентификации и авторизации, вызывает бесконечный цикл после успешного входа в систему на устройствах iOS (браузеры Safari / Chrome). Вход в систему отлично работает на устройствах Android, Win10 и Linux с использованием браузеров FireFox, Chrome и Edge.

Проблема остается постоянной, и я могу легко воспроизвести ее, выполнив следующие шаги:

  1. Пользователь удаляет всю историю из браузера (очистка, чтобы начать с чистого листа)
  2. Пользователь переходит на веб-сайт, перенаправляется на login.microsoftonline.com для входа в систему, из-за атрибута авторизации
  3. Пользователь входит в систему и перенаправляется обратно на веб-сайт. Теперь пользователь вошел в систему.
  4. Вот тут-то и становится странно. Если пользователь обновляет страницу, которая является корневой страницей (‘/’), пользователь теперь выполняет бесконечный цикл на login.microsoftonline.com . Примерно через 10-15 секунд на странице единого входа Microsoft сообщается, что не удается войти пользователю на веб-сайт.
  5. Если пользователь переходит на веб-сайт вручную, введя его URL-адрес, веб-сайт загружается нормально, и пользователь входит в систему.
  6. Если пользователь закрывает веб-сайт и снова открывает его через некоторое время, скажем, через 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();