Android SSO (Single Sign-on) для приложения
Есть ли какой-либо бесплатный механизм синглов для Android, который изящно работает с не-webapps? Скажем, что-то вроде...
-
Вы запускаете мое приложение и используете его до тех пор, пока он не сделает запрос с сервера приложений, требующего проверки подлинности. Он отвечает на этот запрос со случайным токеном, который сервер будет связываться с вами в течение короткого времени.
-
Приложение представляет вам поле имени пользователя, поле пароля и кнопку отправки.
-
Вы вводите свое имя пользователя и пароль. Затем приложение переадресует ваше имя пользователя и хешированный пароль вместе с токеном, сгенерированным сервером приложений, в службу входа в систему.
-
Служба входа в систему определяет, действительно ли ваше имя пользователя и пароль. Если они есть, это цифровая метка времени и подписывает токен и возвращает подписанный токен в приложение.
-
Приложение переносит подписанный токен на сервер.
-
Сервер проверяет подпись, удовлетворяет себе, что она действительна и подписана доверенным органом, и поступает так, как если бы пользователь представил IT с действительным локальным именем пользователя и паролем.
Я подозреваю, что просто теряюсь в номенклатуре, но впечатление, которое я получил до сих пор, заключается в том, что все обычные поставщики SSO - Twitter, Facebook и т.д. - позволяют пользователям регистрироваться в обычном браузере, и что вам либо не разрешено делать то, что я описал, либо они делают что-то, что делает его невозможным практически без обычного браузера (например, динамическое создание формы входа через Javascript в попытке помешать разработчикам использовать свои собственные приложения в качестве фасада входа).
В качестве альтернативы существует ли какой-либо рабочий процесс, например THIS...
-
Вы запускаете мое приложение и используете его, пока веб-служба не потребует от вас входа. Сервер приложений генерирует токен и возвращает его в приложение.
-
Приложение запускает новый браузер с помощью намерения, которое отправляет вас на веб-сайт провайдера входа, передавая токен через намерение браузеру (и в конечном итоге провайдеру) в качестве POSTed formvar.
-
Вы заходите в окно браузера, а окно браузера закрывается - возвращает вас в мое приложение.
-
Поставщик входа в систему подписывает токен, а затем отправляет его непосредственно на сервер приложений через HTTP POST, поэтому я могу отметить его представление, проверить сертификат и обработать его так, как если бы это было действительное имя пользователя и пароль, представленные напрямую пользователем к самому серверу приложений.
Ответы
Ответ 1
Пробовали ли вы использовать Firebase? https://firebase.google.com/docs/auth/?hl=es-419
В нем есть несколько полезных инструментов, вы можете войти в систему с несколькими социальными коннекторами и пользователем/паролем, а также предоставить библиотеку для интеграции всего потока пользовательского интерфейса и сервера, даже если вы воспользуетесь функцией smart lock для Google.
Взгляните на https://github.com/firebase/FirebaseUI-Android Я использовал его в личном проекте и сэкономил много времени.
Ответ 2
То, что вы описали в разделе " Alternatively
", выглядит как код авторизации с использованием пробного ключа для Code Exchange (PKCE), грант OAuth 2.0
https://tools.ietf.org/html/rfc7636
Поток следующий:
1. Ваше приложение генерирует случайный ключ (code_verifier
) и преобразовывает его значение (code_challenge
) и переходит на сервер авторизации с code_challenge
в качестве параметра
2. Сервер авторизации перенаправляет обратно в ваше приложение с кодом авторизации
3. Ваше приложение отправляет code_verifier
authorization_code
и code_verifier
серверу авторизации для получения токена авторизации.
4. Сервер использует authorization_code
и code_verifier
(у него уже есть code_challenge
, так что он может проверить правильность code_verifier
), а затем возвращается в ваше приложение с токеном.
С практической стороны вы можете использовать что-то вроде Auth0 для реализации этого в вашем приложении.
Ответ 3
Используйте Android Account Manager для единого входа.
Предоставление ссылок ниже только для знаний. Вы должны копаться в менеджере аккаунта.
Разработчик Android: https://developer.android.com/training/id-auth
Блог с примером: https://www.zoftino.com/android-account-manager-&-create-custom-account-type