Мы использовали 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.
- У нас есть настроенный пользовательский пул с клиентским приложением и пользовательским пулом
домен.
- Настройка Facebook в качестве поставщика социальной идентификации.
- Добавлен 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.