AWSognito: войдите в систему, используя имя пользователя / пароль ИЛИ facebook

Я хочу интегрировать довольно стандартную функциональность: дать возможность пользователю (мобильному и веб-сайту) либо войти в систему с адресом электронной почты / паролем, либо с учетной записью facebook (google) с RBAC (разные пользователи могут иметь разные роли, такие как пользователи, модераторы, администраторы, создатели , так далее). Вот в основном то, что я хочу от входа:

введите описание изображения здесь

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

Вот мое текущее понимание (пожалуйста, поправьте меня, где я ошибаюсь).

1) Для регистрации / входа по электронной почте / паролю я использую пул пользователей. Когда пользователь входит в систему, я вызываю AuthenticateUser (я использую JS SDK):

cognitoUser.authenticateUser(authenticationDetails, {
..
})

где onSuccess

  • Я храню токены идентификации, доступа и обновления, поэтому пользователю не нужно каждый раз вводить свои учетные данные
  • Поскольку пользователи будут получать доступ к сервису AWS (например, S3), я обмениваю idToken на учетные данные AWS.
  • Храните кредиты AWS в LocalStore для дальнейшего использования при доступе к ресурсам.

2) Для входа в facebook я использую Federated Identity.

  • получить токен доступа к facebook
  • с токеном fb получить когнитивную личность
  • обменять идентификационные данные когнитивных данных на кредиты AWS и сохранить их в LocalStore

Вопросы:

Q1. Это действительная и достаточно полная логика для регистрации / входа в систему? Я что-нибудь пропустил?

Q2. Как мне хранить пользователей facebook? Могу ли я сделать это в пользовательских пулах? У меня сложилось впечатление, что это невозможно, но это означает, что у меня есть 2 разных пользовательских каталога: один в UserPool, а другой в другом месте (скажем, в DynamoDB)

Q3. Если мне нужно хранить пользователей в разных местах (UserPool и DynamoDB), это означает, что у меня есть 2 пользователя по существу для одного пользователя, который сначала зарегистрировался с адресом электронной почты / паролем, а затем решил использовать facebook - это неудобство для меня как администратора приложения и пользователя. . Как справиться с этой ситуацией?

Q4. Как управлять группами для пользователей, которые вошли в систему с помощью токена facebook (например, пользователей, модераторов, администраторов, создателей и т. Д.)?

Q5. Как мне ограничить доступ к ресурсам, отличным от AWS, для пользователей, выполнивших вход в facebook?

Q6. Любой рабочий пример для этого?

Спасибо!




Ответы (2)


  1. Я человек и, возможно, что-то упустил, но для меня это звучит неплохо.

  2. Вы не можете хранить учетные данные федеративных удостоверений в пользовательских пулах. Дело в том, что пулы пользователей являются еще одним поставщиком удостоверений, как и Facebook. Динамо (или что-то еще) было бы подходящим вариантом.

  3. Если пользователь вошел в систему с обоими, связав эти логины, вы можете полностью отказаться от атрибутов пользовательских пулов и использовать только динамо. При двух связанных учетных записях федеративным удостоверениям Cognito для продолжения требуется только один токен входа, но пулам пользователей требуется его токен входа для просмотра / обновления атрибутов. Пользователь должен будет войти в систему с пользовательским пулом, чтобы прикоснуться к этим атрибутам, это будет беспорядочно.

  4. Я не знаю, поддерживается ли это «из коробки», как и в случае с пользовательскими пулами. Возможно, вам придется сделать это, используя вашу гипотетическую базу данных пользователей, описанную выше.
  5. Вы также можете связать свой пул пользователей с Cognito в качестве провайдера, как и с Facebook. Вот как вы обмениваете токен идентификатора на учетные данные.
  6. Официального примера от сервиса нет, хотя за других говорить не могу.
person Jeff Bailey    schedule 16.05.2017
comment
Спасибо за ответ! Дополнительные вопросы к № 3: 3.1) Что вы имели в виду, избегая атрибутов пользовательских пулов? А что за атрибуты? 3.2) Вы имели в виду использовать гипотетическую базу данных (например, Dynamo DB) даже при аутентификации в пулах пользователей для хранения информации профиля пользователя, такой как адрес электронной почты, имя пользователя, идентификаторы (из идентификатора пулов пользователей когнитивных пользователей, из федеративного идентификатора facebook и т. Д.)? Другой вопрос касается упомянутого LocalStorage - я читал, что хранить там токены небезопасно - каковы лучшие практики для этого (на мобильных устройствах и в Интернете) - person Vic K; 17.05.2017
comment
3.1: Пулы пользователей хранят различные атрибуты пользователя (например, имя, адрес, номер телефона или настраиваемый атрибут). Мой ответ предполагает, что вы захотите заполнить их в какой-то форме. 3.2: Да, именно так. Специфика зависит от потребностей вашего приложения, вы можете сделать что-то вроде шифрования без особых проблем. - person Jeff Bailey; 17.05.2017
comment
Большое спасибо, Джефф! - person Vic K; 22.05.2017

Мы добавили поддержку Федерации через Facebook, Google и LoginWithAmazon для пользовательских пулов. Это создаст пользователя в пуле пользователей, когда пользователь войдет в систему с помощью федерации. Вы также можете захватить атрибуты от поставщика удостоверений, используя функцию сопоставления атрибутов.

Кроме того, если вы используете функцию интеграции приложений, пулы пользователей Amazon Cognito сгенерируют для вас такую ​​страницу входа.

Шаги по входу / подписке к социальному провайдеру через Amazon Cognito Console:

  1. Настройте домен для пула пользователей, например .auth..amazoncognito.com.
  2. Добавьте любого социального провайдера и настройте сопоставление атрибутов.
  3. Включите поставщика в App Client.
  4. Настройте URI обратного вызова, тип ответа OAuth и допустимые области.
  5. Получите доступ к своему размещенному пользовательскому интерфейсу по адресу https: //.auth..amazoncognito.com/login? Client_id = & response_type = & redirect_uri =
  6. Нажмите кнопку, чтобы зарегистрироваться / войти с помощью Facebook (или вашего провайдера).
  7. Аутентифицируйтесь у провайдера, вы будете перенаправлены на URI обратного вызова с токенами / кодом.
  8. Проверьте только что созданного пользователя в консоли Amazon Cognito.
person Rachit Dhall    schedule 10.08.2017
comment
Спасибо, Рахит. Это потрясающе! Несколько недель / месяцев назад я увидел, что в Федерацию пулов пользователей была добавлена ​​только поддержка SAML, но никаких социальных сетей. И не ожидал, что в ближайшее время появятся логины fb / google (на самом деле собирался реализовать собственный каталог пользователей, как обсуждалось выше). Обязательно поиграю с ней. Следите за быстрой доставкой функций / исправлений. - person Vic K; 11.08.2017
comment
Док говорит, что это возможно. И я пытаюсь реализовать это в своем приложении. Но мне трудно это сделать. Есть ли для этого какой-нибудь официальный образец или учебник? - person supergentle; 31.08.2017
comment
Удачи @Supergentle? Я также застрял, пытаясь использовать FB с пользовательскими пулами. - person juankuquintana; 22.09.2017
comment
В документации показано использование объекта cognitoidentitycredentials. Как это создает пользователя в пользовательском пуле с сопоставлением атрибутов? Я вижу удостоверение в пуле федеративных удостоверений, но не вижу пользователей в моем пуле пользователей? У меня также есть настройка федеративных удостоверений в пользовательском пуле. Как это создает пользователей Facebook ?? - person Tim Glenn; 24.09.2017
comment
Для использования федерации через пулы пользователей вам не нужен какой-либо код с CognitIdentityCredentials Object, вы можете создать пользователя, просто настроив его из консоли Amazon Cognito. Обновлен ответ, чтобы отразить подробные инструкции. Сообщите нам, если у вас возникнут другие проблемы. - person Rachit Dhall; 25.09.2017
comment
Спасибо за подробности @RachitDhall, но могу ли я сделать это без пользовательского интерфейса аутентификации? Я пытаюсь создать поток регистрации в системе React-Native и хотел бы просто позвонить в Facebook, а затем настроить когнитивную авторизацию новых пользователей в пул. - person Tim Glenn; 03.10.2017
comment
Я сам искал этот ответ. Приведенные выше шаги не очень помогают при попытке интеграции в собственное приложение. Я дохожу до того, что у меня есть объект CognitoIdentityCredentials в моем приложении со всеми учетными данными AWS, которые мне нужны после выполнения входа в facebook, но я не вижу никаких сопоставленных атрибутов, которые я настраиваю в Cognito. Я также никогда не видел, чтобы мои пользователи facebook появлялись в моих пользовательских пулах. Кто-нибудь вообще когда-нибудь заставлял этот поток работать? Я искал образец в течение нескольких дней, но безуспешно. - person JasonPerr; 12.10.2017
comment
Похоже, вы интегрировали Facebook с Cognito Federated Identities, а не с пулами пользователей Cognito. Вы пробовали запустить этот образец (github.com/awslabs/aws -sdk-android-samples / tree / master /) после указанной выше конфигурации? - person Rachit Dhall; 13.10.2017
comment
Пробовал это , но не удалось. Обратите внимание, что на шаге 5 я не знал, что поставить для response_type, а для redirect_uri, я просто поместил все, что у меня есть, в URL-адреса обратного вызова в консоли. - person Daniel Birowsky Popeski; 07.12.2017
comment
@RachitDhall Я пробовал это, но у меня возникают проблемы, потому что Facebook не возвращает электронное письмо, которое требуется для моего приложения (и, вероятно, для 99% приложений). См. Мой вопрос здесь stackoverflow.com/questions/48135017/ - person CodyBugstein; 07.01.2018
comment
@CodyBugstein Я только что ответил на ваш вопрос, дайте мне знать, работает он или нет. - person Rachit Dhall; 08.01.2018