Получить поставщика учетных данных для аутентифицированных пользователей

Мое приложение для Android входит в систему с помощью Google Plus, я пытаюсь интегрировать его с Cognito. Когда я запускаю приложение, оно дает мне идентификатор поставщика учетных данных Cognito, а когда я вхожу в систему с помощью Google Plus, оно дает мне токен Google. Я проверил свой AWS Cognito, и он показывает мне это.

Unauthenticated connections 3
Google Sign-in 0.

Но когда он правильно входит в Google, а также предоставляет мне токен Google, то где я делаю неправильно?

EDIT 1: Вот мой код:

Вход с Google Плюс

Cognito Диспетчер клиентов синхронизации


person user2798227    schedule 10.02.2015    source источник


Ответы (1)


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

Следовали ли вы руководству по интеграции поставщиков удостоверений? ?

Также важно отметить, что CredentialsProvider выполняет отложенную загрузку, то есть простое добавление токена к провайдеру не связывает удостоверение. Чтобы убедиться, что токен действительно связан с личностью, вы можете:

  • Вызовите другую службу (например, SyncManager), использующую этого провайдера (рекомендуется).
  • Явно вызовите refresh в своем CredentialsProvider. (рекомендуется только для тестирования)

Изменить 1

Вы добавили тесты, которые я предложил в своем первоначальном ответе? Если да, то что, если вы получили какие-либо ошибки?

Вы можете попробовать выполнить некоторые из следующих шагов, чтобы проверить конфигурацию:

  • Проверьте токен через jwt.io. Убедитесь, что поле azp токена соответствует значению, введенному в консоль Cognito.
  • Создайте провайдера OpenId Connect с помощью консоли IAM. , добавив все идентификаторы клиентов из консоли Google. Используйте этого провайдера вместо базовой интеграции Google+ в пуле удостоверений Amazon Cognito.
person Bob Kinney    schedule 11.02.2015
comment
Спасибо за ваш ответ. Я следовал руководству по интеграции поставщиков удостоверений. Я также включил ссылку на мой код в вопрос. Пожалуйста, посмотрите. - person user2798227; 12.02.2015
comment
@user2798227 user2798227 Вы не должны помещать свою информацию в общедоступный репозиторий. Ваш пул допускает неаутентифицированный доступ и может быть использован не по назначению. - person Bob Kinney; 12.02.2015
comment
Теперь я отредактировал пул удостоверений cognito и изменил неаутентифицированную роль на none, а также снял флажок «Включить неаутентифицированных пользователей». Я оставил пустым место в коде для Unauth_role_arn вот так private static final String UNAUTH_ROLE_ARN = ""; Я попытался снова запустить программу, она запускается, дает мне поставщика учетных данных, затем я подключаюсь к google plus, и он дает мне токен google. Затем я снова проверил консоль Cognito. Он по-прежнему говорит, что Войти через Google = 0. - person user2798227; 12.02.2015
comment
@ user2798227 Я обновил свой ответ дополнительной информацией. - person Bob Kinney; 12.02.2015
comment
Я попытался скопировать и вставить свой токен Google в jwt.io. Я получил несколько ненужных значений после декодирования. Но когда я попытался заменить свой токен на токен доступа в этой ссылке https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=accessToken, в выданном ему выдается мой идентификатор клиента. Это означает, что это правильный токен, не так ли? - person user2798227; 12.02.2015
comment
@user2798227 user2798227 Нет. Это означает, что вы используете токен доступа, а не токен идентификатора. Извините, что не заметили раньше, но ваш код не является кодом, включенным в руководство. Используйте этот код или посмотрите наш пример. - person Bob Kinney; 12.02.2015
comment
Спасибо за ответ. Если вы посмотрите на мой код, войдите в систему с помощью файла Google Plus и выполните поиск этой строки doInBackground(Void, вы обнаружите, что я использую тот же код, который включен в руководство. - person user2798227; 12.02.2015
comment
@user2798227 user2798227 В вашем коде используется SCOPE, что не является правильным значением для получения id_token. Вы должны изменить это на mScope. Кроме того, похоже, вы не вызываете обновление или какие-либо вызовы API. Как я уже упоминал в своем ответе, это обеспечит принудительную ссылку на личность. - person Bob Kinney; 12.02.2015
comment
Я пытался использовать mScope, он входит в систему с помощью Google Plus, но выдает мне GoogleAuthException: Unknown в логарифме. Можете ли вы проверить, правильно ли я инициализирую mScope? Я вызову обновление, как только это заработает. Спасибо - person user2798227; 12.02.2015
comment
@user2798227 mScope содержит :api_scope:googleapis.com/auth/plus.login, вы следует удалить это. - person Bob Kinney; 12.02.2015
comment
Просто чтобы вы знали, идентификатор клиента, который я ввел здесь, был создан с использованием шагов, описанных в руководство. Теперь, когда я использую mScope, и он выглядит так String mScope="audience:server:client_id:899555500747-q6gfkucloightgtisgspnsnuvhid2hrb.apps.googleusercontent.com";, он по-прежнему выдает ту же ошибку. GoogleAuthException: Unknown. - person user2798227; 12.02.2015
comment
Давайте продолжим обсуждение в чате. - person Bob Kinney; 12.02.2015