2016-02-01 3 views
4

Я установил поток аутентификации с Facebook Login и AWS Cognito на клиентском сайте. Работает отлично. Но теперь мне нужна ссылка пользователя с идентификатором facebook в таблице dynambodb. Конечно, я мог бы просто вызвать функцию лямбда AWS, открытую через шлюз AWS API, но как я могу проверить, что вызов API действительно имеет действительный идентификатор facebook и что этот идентификатор facebook соответствует идентификатору Cognito AWS. Может быть, я что-то упустил здесь, надеюсь, вы, ребята, можете указать мне в правильном направлении;) спасибо!AWS Cognito, Lambda, учетные данные пользователя в DynamoDB

ответ

2

Если вы можете ввести свой ddb-таблицу с помощью идентификатора cognito вместо идентификатора facebook, вы можете вызвать api-шлюз с учетными данными cognito. Если вы используете учетные данные при вызове лямбда, вы можете получить доступ к идентификатору cognito через токен $context.identity.cognitoIdentityId. Это гарантирует, что вызов был сделан владельцем этого идентификатора. Вы также можете проверить, что $context.identity.cognitoAuthenticationProvider - graph.facebook.com, чтобы обеспечить их авторизацию через Facebook. К сожалению, идентификатор facebook не передается в учетных данных, поэтому, если вам это нужно, вам понадобится таблица поиска, сопоставляющая идентификатор cognito с идентификатором facebook. Для получения дополнительной информации о доступных токенах см. here.

+0

Просто, чтобы быть уверенным, что я понял: безопасный способ получить и сохранить идентификатор facebook в dynamodb при использовании AWS Cognito? – user1990524

+0

Существуют способы, но вам необходимо поддерживать связь между идентификатором cognito и идентификатором facebook самостоятельно и безопасно устанавливать эту ссылку. Если у вас только есть пользователи facebook, вы можете взглянуть на федерацию веб-идентификации: http://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_oidc_manual.html таким образом, ваш ключ в ddb может быть facebook ID. – behrooziAWS

+0

Спасибо, AWS может быть немного подавляющим в начале. Будьте уверены, это фантастическая инфраструктура! – user1990524

1

Я бы предложил сделать следующее (я новичок в АМС, а также, дайте мне знать, если у вас есть какие-либо предложения):

  1. Создание API шлюза /fblogin конечной точки, где разместим Access Facebook Токен (вы должны пройти аутентификацию с Facebook на стороне клиента, чтобы получить этот токен). Эта конечная точка связана с функцией лямбда: fb_login.
  2. В функции fb_login вы выполните аутентификацию с помощью Amazon Cognito, чтобы получить ее учетные данные. Вы должны создать пул пользователей Federated Identity в Cognito и назначить соответствующие роли для этого пула пользователей. Это помогает, если вы хотите ограничить свой API только теми, кто прошел аутентификацию и авторизацию. Итак, результат от Cognito будет иметь IdentityId и Credentials. Вы можете вернуть их в результате вашего запроса до /fblogin.
  3. Используя приведенный выше результат, вы можете подписать запросы, которые вы отправляете в API на API Gateway (Or you can use AWS custom generated SDK for your API to handle the signing). На конечных точках шлюза API включите CORS и аутентификацию как AWS_IAM. Таким образом, API Gateway проверяет пользователя автоматически, проверяя подпись в запросе. Вы можете получить идентификатор пользователя от $context.identity.cognitoIdentityId, как предложили другие. Таким образом, вы можете быть уверены, что пользователь авторизован и аутентифицирован.

Примечание: Убедитесь, что вы реализуете /fblogin конечную точку HTTPS, то маркер FB Access будет безопасным. Если нет, он будет отображаться как обычный текст через HTTP.

Также используйте таблицу DB Dynamo как журнал для CognitoID - FacebookID. Вы можете включить это в функцию шага 2 лямбда ifself или что-нибудь, что вы считаете нужным.

Смежные вопросы