Аутентифицировать пользователя федерации социальной идентификации в 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 https://yourdomain.auth.us-east-1.amazoncognito.com/oauth2/authorize?redirect_uri=redirect_app_path&response_type=code&client_id=%22client_id%22&identity_provider=Facebook

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

Резюме

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

1 ответ

Чтобы подключиться к пулу пользователей, я включил 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.

Другие вопросы по тегам