обновите маркер доступа к Facebook после входа в систему, используя ionic с AWS Cognito Federated Identity и AWS усилителем - PullRequest
0 голосов
/ 29 января 2019

У меня есть гибридное приложение, которое использует Cognito Federted Identity (Facebook) для входа в систему наряду с пулом пользователей Cognito с помощью библиотеки AWS Amplify Javascript.Вход в Cognito User Pool работает нормально, AWS усиливает обработку обновления токена, поэтому пользователи никогда не выходят из приложения, даже если приложение перезапускается.Это не то же самое, если использовать федеративную идентификацию: после входа в систему через Facebook я получаю кратковременный токен доступа (1 час), которым я обмениваюсь с токеном AWS с помощью AWS.federatedSign ().

AWS Amplify Официальная документацияговорит, что ASW усиление должно автоматически обновить токен для Google / Facebook.В моем случае я получаю ошибку:

refreshing federation token failed: no fb sdk available

1 Ответ

0 голосов
/ 09 июля 2019

Документация AWS не велика, мое понимание (я только что боролся с этим в течение нескольких дней), как показано ниже.Надеемся, это поможет ...

Существует два сценария, в которых Amplify / Cognito поддерживает федеративную аутентификацию.

1) Когда поставщик федеративной аутентификации используется для входа в Cognito User-бассейн .Это (насколько я могу судить) возможно только при использовании размещенного на Cognito сайта для входа в систему.Ваш код может напоминать ...

Auth.federatedSignIn({provider: 'Facebook'})

или

Auth.federatedSignIn()

2) Когда ваше приложение аутентифицируется непосредственно в Facebook (например, с помощью собственного приложения устройства), а затем аутентифицируется с помощью Cognito Identity-Pool с использованием авторизации в Facebook.Ваш код может выглядеть примерно так ...

fb.login(['public_profile', 'email'])
.then(response => {
  // Some object marshalling omitted...
  Auth.federatedSignIn('facebook', { token: accessToken, expires_at }, user)
})

Документация AWS часто, кажется, не различает два очень разных варианта использования, но в общем случае сценарий 1 лучше / чаще документируется.

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

Во втором сценарии - я считаю, что всеCognito предоставляет вам учетные данные IAM (указанной роли) в обмен на учетные данные вашего провайдера.Вы должны сами реализовать жизненный цикл токена для токена провайдера в своем приложении.

Он не дает прямого ответа на ваш вопрос, но я нашел это очень полезное руководство https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_oidc_cognito.html

I 'Мы также создаем блог, в котором подробно рассказываю, как это работает в Ionic https://martincroker.wordpress.com/2019/07/09/using-ionic-with-aws-amplify-facebook-authentication/

...