Мы использовали 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
Но при таком подходе есть проблема. Мне не удалось найти способ передать токен доступа к 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.