Экспо: WebBrowser.openAuthSessionAsyn c и связанные вызовы пропускают ввод пользователя даже после окончания сеанса браузера - PullRequest
0 голосов
/ 14 апреля 2020

Это сводная информация о проблеме Я подал напрямую через expo (она закрыта, но я просил ее открыть):

Эта проблема возникает при использовании AuthSession.startAsync, AppAuth.authAsync или WebBrowser.openAuthSessionAsync на iOS в локальной разработке и опубликованном выпуске (управляемый expo). Еще не пробовал автономную сборку.

Шаги для воспроизведения

  1. пользователь нажимает кнопку «Войти» (приложение вызывает один из описанные выше методы запуска сеанса аутентификации с oauth-провайдером Salesforce)
  2. пользователь успешно вводит учетные данные
  3. приложение выполняет перенаправление oauth и возвращает пользователя в наше приложение, и мы получаем токен доступа. пользователь нажимает кнопку «Выйти» (приложение вызывает конечную точку отзыва для токена, а затем вызывает конечную точку сервера, чтобы удалить любые браузерные приготовления ie сеансов для данной учетной записи)
  4. приложение перемещается для входа в экран
  5. пользователь снова нажимает «войти» (приложение вызывает тот же метод сверху, чтобы снова запустить сеанс аутентификации с oauth-провайдером Salesforce)
  6. вместо открытия страницы входа приложение перенаправляет себя обратно с токеном доступа как если бы пользователь успешно ввел свои учетные данные, даже если любые файлы cookie / данные сеанса, которые хранит браузер, должны быть недействительными и требовать входа.

Ожидаемое поведение

шаги 1 - 5 все как и ожидалось. Шаг шестой должен быть

приложение перенаправляет на страницу входа в Salesforce oauth провайдера, в неаутентифицированном состоянии (ie нет готовки ie или ранее сохраненные данные сеанса все еще действительны) пользователь должен повторно ввести свои учетные данные поток oauth вступает во владение и перенаправляет пользователя в приложение, если учетные данные были правильными.

Фактическое поведение

согласно исходному шаги, когда пользователю даже не предлагается вводить свои учетные данные (шаг 6):

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

Воспроизводимая демонстрация

Код находится в частном репозитории, поэтому я не могу поделиться информацией о нем, но это очень стандартный поток oauth, и я вижу, что То, что происходит во всех трех вызовах метода сверху, подсказывает мне, что это может быть связано с чем-то в реализации WebBrowser.openAuthSessionAsync. В документах для разработчиков Apple я видел, что SFAuthenticationSession устарел в пользу ASWebAuthenticationSession . Насколько я понимаю, это (SFAuthenticationSession) - это браузер, используемый Web-браузером expo и упомянутыми выше оболочками (AppAuth и AuthSession) для взаимодействия oauth. Я также вижу, что в нем упоминается, что он предназначен для одноразового входа в систему, что, возможно, объясняет, почему он будет удерживать любые данные сеанса и переходить к завершению повторной аутентификации без непосредственного запроса учетных данных от пользователя, но, кажется, бесполезно хранить повар ie без проверки, что является конечным результатом.

Примечания

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

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

Я хотел бы, чтобы пользователи могли выходить из системы, а затем, когда они войдут в систему снова они должны будут ввести свои учетные данные снова. У кого-нибудь есть мысли о том, как это возможно?

...