Требуется руководство по диагностике аутентификации бесконечного цикла на ios (safari и chrome) с сервером идентификации 4 - PullRequest
0 голосов
/ 10 декабря 2018

У меня странная проблема с сервером идентификации 4 (развернутым как служба приложений Azure) и аутентификацией на мобильных устройствах.Я использую OpenId connect .NET core MVC клиент для аутентификации на моем сервере идентификации (который настроен с помощью AspNetIdentity).Это работает абсолютно нормально с настольным браузером, но на iphone, когда я вхожу в систему, происходит бесконечный цикл, отскакивающий назад и четвертый между сервером id и клиентом (с мобильным сафари или chrome).

Если я остановлюсьцикл и прерывание затем переходят на сайт, я проверяю, что показывает, что файл cookie был исправен.

Странно то, что у меня есть другая система с почти идентичной настройкой, которая не имеет этогоповедение.Так как ошибок нет, и я могу воспроизводить только на мобильном устройстве в моей промежуточной среде, мне трудно найти шаги для диагностики проблемы или где я должен искать.

Я не выдаюбольшое количество утверждений или что-либо, что могло бы увеличить размер файла cookie.

Это в значительной степени идентично этой проблеме с сервером идентификации 3:

Постоянное перенаправление IdentityServer3 при входе в систему только на мобильном телефоне

Любые указатели на то, что я должен искать здесь, было бы замечательно.

1 Ответ

0 голосов
/ 10 декабря 2018

В iOS12 Safari произошли некоторые изменения, которые нарушали вход в oidc при использовании конфигурации по умолчанию.Как подробно описано здесь: https://github.com/aspnet/Security/issues/1864

Если вы используете ASP.NET Core Identity, вы отключаете защиту, настраивая файлы cookie со следующим кодом

services.ConfigureExternalCookie(options =>
{
    // Other options
    options.Cookie.SameSite = SameSiteMode.None;
});
services.ConfigureApplicationCookie(options =>
{
    // Other options
    options.Cookie.SameSite = SameSiteMode.None;
});

Если вы используете проверку подлинности с использованием cookie без идентификации ядра ASP.NET, вы можете отключить защиту с помощью следующего кода:

services.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options =>
{
    // Other options
    options.Cookie.SameSite = Microsoft.AspNetCore.Http.SameSiteMode.None;
});

Если вы используете внешних поставщиков OIDC, вы можетеЧтобы избежать этой проблемы, измените режим ответа, используемый вашим провайдером, с POST на GET-запрос, используя следующий код.Не все поставщики могут поддерживать это.

.AddOpenIdConnect("myOIDProvider", options => {
    // Other options
    options.ResponseType = "code";
    options.ResponseMode = "query";
};

_ Обратите внимание, что при внесении этих изменений защита удаляется для всех пользователей и всех браузеров.Вы должны убедиться, что все ваши действия, которые вносят изменения в состояние, защищены с помощью механизмов защиты от подделки CSRF, встроенных в ASP.NET Core.

...