Аутентифицировать пользователя федерации социальной идентификации в AWS Userpool? - Android - PullRequest
0 голосов
/ 05 июля 2018

Мы использовали com.amazonaws:aws-android-sdk-cognitoidentityprovider:2.6.8 SDK для имени пользователя и пароля на основе входа в систему и регистрации потока. Следуя подходу, упомянутому здесь https://docs.aws.amazon.com/cognito/latest/developerguide/tutorial-integrating-user-pools-android.html. Процесс регистрации и входа работает в соответствии с требованиями.

Для аутентификации Facebook и Google через федерацию, мы не хотим использовать размещенный пользовательский интерфейс для этой цели и не используем федеративные идентификаторы. Мы перешли по этой ссылке https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-identity-federation.html.

  1. У нас есть настроенный пользовательский пул с клиентским приложением и пользовательским пулом домен.
  2. Настройка Facebook в качестве поставщика социальной идентификации.
  3. Добавлен URL для обратного вызова Android на мобильный телефон.

Первый подход

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

Второй подход

Мы использовали веб-просмотр и загрузили приведенный ниже URL. URL перенаправляет меня прямо в Facebook, после аутентификации возвращает меня к перенаправлению URL с access_token, auth_type, expires in и id_token. Но нет обновления токена. URL https://yourdomain.auth.us -east-1.amazoncognito.com / oauth2 / authorize? Redirect_uri = redirect_app_path & response_type = code & client_id = "client_id" & identity_provider = Facebook

Но есть проблема с использованием этого подхода. Я не смог найти способ передать токен доступа в cognitoUserSession в SDK, который управляет пользовательским сеансом. Поэтому каждый раз, когда я регистрируюсь с помощью Facebook (используя веб-просмотр), в SDK нет поддержки сеансов. Следовательно, я перенаправлен на страницу входа снова. Как убедиться, что пользователь Facebook аутентифицирован и авторизован cognitoidentityprovider? Как создать сеанс пользователя в SDK при получении access_token и id_token?

Третий подход

Мы попытались использовать Cognito Auth Demo https://github.com/awslabs/aws-sdk-android-samples/tree/master/AmazonCognitoAuthDemo. Для этого нам нужно добавить еще одну библиотеку com.amazonaws:aws-android-sdk-cognitoauth. После нажатия на кнопку «Войти», он переходил к hosted-ui. Изучив аналогичный проект IOS, мы внесли изменения в проект библиотеки Android (com.amazonaws: aws-android-sdk-cognitoauth для android). Мы добавили identity_provider в URI для входа в систему. Затем он перенаправляет нас прямо в Facebook на вкладке Chrome. После аутентификации он установил сессию в нашем приложении. Но у него есть собственный объект аутентификации, который является AuthSession, но ранее мы использовали CogintoUserSession для обычной регистрации. AuthSession не имеет атрибутов пользователя и не предлагает никаких сведений о пользователе или обработчиков аутентификации. Если мы используем этот подход, то как связать AuthSession с CognitoUserSession и управлять пользовательским сеансом в приложении?

Резюме

Короче говоря, мы устали от сэмплов AWS, и это приводит нас к веб-интерфейсу. Нам нужно аутентифицировать пользователя через Facebook, чтобы пользовательский пул использовал только провайдер федерации. Нам нужно поддерживать сеанс в Cognito SDK, не влияя на наш поток входа в систему на основе имени пользователя и пароля. Мы хотим открывать Facebook напрямую или просматривать веб-страницы в нашем приложении по нажатию кнопки, аутентифицировать пользователя и поддерживать сеанс в приложении, используя только Cognito SDK.

1 Ответ

0 голосов
/ 10 июля 2018

Чтобы подключиться к пулу пользователей, я включил aws-android-sdk-cognitoidentityprovider. Но если вам нужно добавить социальную регистрацию, вам также нужно добавить cognitoauth.

  1. Убедитесь, что версия Cognito SDK одинакова, иначе вы можете столкнуться с ошибкой усложнения.

  2. В соответствии с потребностями проекта, мне нужен провайдер идентификации, чтобы перейти в SDK, чтобы он мог напрямую перейти непосредственно на мою страницу провайдера социальной идентификации. Но текущая версия SDK ' 2.6.24 ' не предоставила мне это положение. Я скачал android-sdk-cognitoauth sdk из awslab github и включил в свой проект. Я изменил класс Auth.java, добавил в него переменную провайдера идентификации.

  3. Следующий шаг - изменить метод AuthClient.java launchCognitoAuth . Я помещаю дополнительное условие, чтобы проверить, присутствует ли провайдер идентификации или нет. Затем я установил его в знак входа в URI.

    if (pool.getIdentityProvider() != null) { builder.appendQueryParameter(ClientConstants.DOMAIN_QUERY_PARAM_IDENTITY_PROVIDER, pool.getIdentityProvider().toString()); }

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

Подводя итог, я обнаружил разницу между реализацией проекта android и ios. В проекте iOS aws предоставил возможность напрямую добавлять провайдера идентификации. Я проследил за ходом проекта ios и внёс изменения в проект android congitio-auth. О разнице также сообщалось в aws-sdk-android-sample , вопросы .

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