Аутентифицировать пользователя федерации социальной идентификации в AWS Userpool? - Android

Мы использовали 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

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

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

Мы попытались использовать демонстрационную версию Cognito Auth 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 -ognitoauth для Android). Мы добавили identity_provider в URI для входа. Затем он переносит нас прямо в Facebook на вкладке Chrome. После аутентификации он установил сеанс в нашем приложении. Но у него есть собственный объект аутентификации, которым является AuthSession, но раньше мы использовали CogintoUserSession для обычной регистрации. AuthSession не имеет атрибутов пользователя и не предлагает никаких данных пользователя или обработчиков аутентификации. Если мы воспользуемся этим подходом, то как связать AuthSession с CognitoUserSession и управлять сеансом пользователя в приложении?

Резюме

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


person Mirza Faizan Baig    schedule 05.07.2018    source источник


Ответы (1)


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

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

  2. В соответствии с потребностями проекта мне нужен поставщик удостоверений для перехода в SDK, чтобы он мог напрямую переходить непосредственно на мою страницу поставщика удостоверений в социальных сетях. Но текущая версия SDK 2.6.24 не предоставила мне это положение. Я загрузил sdk android-sdk -ognitoauth из 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.

person Mirza Faizan Baig    schedule 10.07.2018