Как реализовать единый вход / выход OAuth с помощью пользовательских вкладок Chrome - PullRequest
0 голосов
/ 28 января 2019

Я пытаюсь внедрить единый вход / выход OAuth в моем текущем приложении Android.

Я использую вкладки Chrome Custom

 implementation 'com.android.support:customtabs:28.0.0'

Вход работает нормально, вкладки Chrome Customсохраните файлы cookie пользователей, и все процессы входа будут работать, как и ожидалось.

Новый вход:

  1. Очистка файлов cookie Chrome
  2. Очистка хранилища приложения
  3. Приложение Android загружает URL-адрес для входа с помощью пользовательской вкладки Chrome
  4. Пользователь должен ввести имя пользователя и пароль
  5. Перенаправить URL-адрес с пользовательской схемой «обратных вызовов» в мое приложение для Android, и яполучите действительный токен доступа.

ОБНОВЛЕНИЕ: Поскольку мои android-устройства получили обновление Chrome до версии 72, вышеуказанное перестало работать.См. Мой связанный вопрос SO , вопрос

Если в chrome есть политика безопасности, в которой он не разрешает перенаправления без взаимодействия с пользователем, почему я получаю новое намерение при загрузке первого URL-адреса для подписив чем есть подсказка = нет?На данный момент не было никакого взаимодействия с пользователем.Этот шаг все еще работает нормально даже после обновления до Chrome 72, которое прервало вход в систему с помощью prompt = login, и на этом втором шаге происходит взаимодействие с пользователем, так как пользователь не только должен вводить свое имя пользователя и пароль, после чего он нажимает накнопка входа в систему.

Когда я добавляю «согласие» к обоим запросам, появляется сообщение «подсказка = отсутствие согласия», а затем «подсказка = согласие на вход», пользователь может войти в систему, однако они представлены с «одобрением»."экран, прежде чем они смогут продолжить в моем приложении.Почему при добавлении «согласия» мой вход в систему работает?и откуда появляется экран «утверждения»?

Последующий вход в систему:

  1. Приложение загружает URL-адрес для входа с помощью пользовательской вкладки Chrome
  2. ChromeПользовательские файлы cookie пользовательских вкладок используются для «тихого входа» пользователя.
  3. Пользователь входит в приложение Android

У меня проблема с выходом из системы.

Когда пользователь нажимает кнопку «Выйти» в моем приложении, приложение загружает выход URL через пользовательскую вкладку Chrome, но он «застревает».Экран, который видит пользователь, представляет собой пустой белый экран.

Я полагаю, что это связано с ограничениями безопасности пользовательских вкладок Chrome, упомянутыми в этом вопросе SO Застревание CCT ...

точнее, это утверждение:

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

Я вижу, что наши пользователи всегда могут войти в систему без каких-либо проблем, даже при отсутствии взаимодействия с пользователем, где, например, когда мы пытаемся загрузить URL для выхода из системы с помощью CCTмы всегда получаем «STUCK» на пустой странице CCT.

Я не понимаю, почему работает тихий вход, а «программный» выход не работает, хотя ни один из них не взаимодействует с пользователемучастие.

Если бы мне пришлось угадывать, я бы сказал, что вход в систему работает, когда CCT обнаруживает пользовательские куки-файлы и признает, что они могут быть сохранены только сВзаимодействие с пользователем.

Где, поскольку при выходе из системы вообще не было взаимодействия с пользователем.

Как решить проблему с выходом из CCT?

Буду ли я нуждатьсязагрузить URL-адрес веб-страницы, на которой размещена кнопка «Выйти»?

1 Ответ

0 голосов
/ 03 февраля 2019

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

AFAIK перенаправление на веб-страницу не требует согласия пользователя и менее подвержено ограничениям по сравнению с перенаправлением в приложение.

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

Новый вход:

  1. Очистка файлов cookie Chrome
  2. Очистка хранилища приложения
  3. Приложение Android загружает URL-адрес входа с пользовательской вкладкой Chrome
  4. Пользователь должен ввести имя пользователя и пароль
  5. Перенаправить URL на ваше веб-приложение, которое затем перенаправит его на ваше приложение с любыми параметрами, которые он получил, т.е.Access Token

То же самое для процесса выхода из системы.На вашей веб-странице у вас будет автоматическое перенаправление (например, с использованием JS) и опция аварийного переключения, пользователь нажимает кнопку, чтобы вернуться в ваше приложение.Ваша страница будет выглядеть примерно так:

<!doctype html>
<html lang="en">
<head>
    <script type="text/javascript">
        document.addEventListener("DOMContentLoaded", function() {
            document.getElementById("redirectButton").click();
            setTimeout(function() {
                window.location.href = "{{ path('homepage') }}";
            }, 10000);
        });
    </script>    
</head>
<body>
<p>Redirecting to XXX app, it will only take few seconds...</p>
<a href="{{ redirect_url }}" id="redirectButton">Click here to go back to XXX App</a>
</body>
</html>

Обратите внимание, что этот процесс может быть быстрым, и пользователь может даже не увидеть эту страницу

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...