SFAuthenticationSession/ASWebAuthenticationSession и выход из системы

Я планирую переключить приложение из старого потока OAuth с помощью SFSafariViewController в новый поток с помощью iOS 11 SFAuthenticationSession. Вход в систему не является проблемой, переход на новый API потребовал мне нескольких минут для реализации. Однако изгнание меня озадачило.

Как?

Я не могу найти упоминания о желании предложить возможность выхода из любой точки документа. Использование старого SFSafariViewController для аннулирования файлов cookie? Нет, они больше не разделяются с SFAuthenticationSession. Как только я перезапущу сеанс аутентификации, пользователь автоматически регистрируется и нет выхода. Итак, как включить выход из системы? Или я просто пропускаю что-то совершенно очевидное?

Обновление: я нашел "способ, который работает" в техническом смысле, но это бред для пользователя: Откройте новую страницу SFAuthenticationSession на странице выхода, которая очищает файл cookie. Но это означает, что при выходе из режима предупреждения снова спрашивает пользователя, хочет ли он войти в систему через службу. Если выбрано "Да" ("вход в систему"), открывается страница выхода для очистки cookie, пользователь должен вручную отклонить представление, которое может быть уловлено обработчиком завершения, и мы знаем, что мы снова можем открыть окно входа в систему. войдите в систему, чтобы выйти из системы? Мне действительно не нравится это решение.

Есть идеи? Я все еще игнорирую совершенно очевидное решение?

Обновление 2: поскольку никто до сих пор не знает об этой проблеме, это, вероятно, нелегко. Я подал предложение с Apple через свой инструмент отчета, чтобы либо выяснить, как справиться с этим, либо создать его в API, если он недоступен. Будет ли сообщение, если я получу ответ.

Обновление 3: рассмотрев проблему немного, мы обнаружили другое возможное (хотя и непривлекательное) решение, если вы можете влиять на страницу входа в систему поставщика OAuth: сделайте куки очень короткими. Затем можно открыть страницу входа в систему без автоматического входа в систему. Однако это убивает всю цель совместного использования сеансов входа в систему между приложениями.. и вы должны иметь возможность влиять на страницу входа.

Обновление 4: Поскольку iOS 12 SFAuthenticationSession устарела и заменена на ASWebAuthenticationSession. Однако ASWebAuthenticationSession ничего не меняет в отношении выхода из системы. Это все еще невозможно. Та же проблема, что и раньше.

Ответы

Ответ 1

Это одно и то, что нас раздражает. Почему в сеансе нет метода "очистить все файлы cookie"? Это решило бы эту проблему полностью. И это также будет оставаться безопасным, так как вы не получите доступ к самим файлам cookie.

Подталкивая это и надеясь, что для этого будет решение Apple.

@Posters ниже ASWebAuthenticationSession не является заменой, это скорее переименование SFAuthenticationSession. Я не вижу причин, по которым яблоко не предоставило нам метод ClearSession или ClearCookies. ASWebAuthenticationSession или SFAuthenticationSession полностью бесполезны, если они не добавляют какой-либо рабочий процесс для фактического выхода из существующего сеанса.

Ответ 2

Одним из "лучших" решений, с SFSafariViewController я столкнулся, является открытие страницы выхода из системы Safari (а не SFSafariViewController). Поскольку ASWebAuthenticationSession совместно использует файлы cookie с Safari, истекший/удаленный файл cookie также влияет на приложение.

См. Эту страницу GitHub для получения более подробной информации.

Ответ 4

Когда вы выходите из системы с помощью SFAuthenticationSession, вы не получите обработчик завершения. Вы получите только обработчик завершения отправки, который будет таким же для предупреждения о разрешении, и для кнопки отмены в Контроллере проверки подлинности

Ответ 5

У вас, ребята, есть какие-нибудь новости об этом? Я также на той же странице, что и вы, и не могу удалить файлы cookie и выйти из системы без необходимости показывать другую ASWebAuthenticationSession

Ответ 6

Это зависит от того, в каком cookie хранятся ваши данные для входа;

Если это файл cookie сеанса, то он не передается в Safari в соответствии с https://developer.apple.com/documentation/authenticationservices/aswebauthenticationsession.

Итак, просто очистите ваш локальный сеанс, и куки будут удалены при следующем запуске приложения.

Если нет, и файл cookie сохраняется, то, как сказал Мартин выше, вы должны открыть Safari (не SFSafariViewController) с URL-адресом выхода из системы, а затем перенаправить обратно в свое приложение.

Пожалуйста, дайте мне знать, если вам нужно больше информации. Я тщательно протестировал все 3 способа аутентификации (ASWebAuthenticationSession, Safari и SFSafariViewController).