AWS Cognito / Получение информации о пользователе из сабвуфера

У меня есть работающее приложение для iOS, использующее AWS Cognito AWSMobileClient, где пользователи могут входить и выходить из системы с помощью AWSAuthUI.

Что я хочу сделать дальше: имея подписку от другого пользователя (например, 7y873ff7-.....u9h4k), я хотел бы получить информацию от этого другого пользователя.

После поиска в сети кажется, что мне нужно использовать что-то под названием ListUsers, но я не уверен на 100%. Может ли кто-нибудь подтвердить это и дать мне несколько советов о том, как мне нужно идти, чтобы сделать то, что я хочу? Зная, что я работаю в Swift.

...... Позднее обновление поста .......

Следующие примеры я нашел в сети; вот некоторый код, который я собрал для начала.

let getUsersRequest = AWSCognitoIdentityProviderListUsersRequest()

getUsersRequest?.attributesToGet = ["email"]
getUsersRequest?.userPoolId = "MY-POOL-ID"
getUsersRequest?.filter = "sub = \"SOME-USER-SUB\""

AWSCognitoIdentityProvider(forKey: "MY-POOL-ID").listUsers(getUsersRequest!,completionHandler: {
    (response, error) in
    print("OK, Here we are!")
})

Но я никогда не вижу сообщения: ОК, вот и мы!

Значит, я, должно быть, делаю что-то не так. Конечно, MY-POOL-ID и SOME-USER-SUB — это реальные данные, которые я беру из своей консоли AWS.

Какая у вас ошибка? Авторизован ли пользователь для вызова ListUsers? У вас есть пул удостоверений, настроенный с соответствующей ролью?

bgdnlp 03.06.2019 07:23

Читая мой пост, вы можете заметить, что я даже не дохожу до того момента, когда есть шанс напечатать ошибку (иначе сообщение было бы напечатано... и я бы проверил на возможную ошибку). Для вас 2-й вопрос .... становится интересно: может быть, здесь я начинаю накосячить. Что мне нужно, чтобы пользователь был авторизован для вызова ListUsers? О какой правильной роли вы говорите?

Michel 03.06.2019 08:05

Это API, вы должны получить какой-то ответ. Хотя бы HTTP-код, 200, 401, 403, что-то. Во всяком случае, обновил мой ответ.

bgdnlp 03.06.2019 08:08

Ладно, хорошо; тогда что я сделал не так?

Michel 03.06.2019 08:34
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
1 282
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы бы действительно использовали API ListUsers.

Здесь — это его документация для AWS iOS SDK. Один из фильтров, которые вы можете применить, предназначен для «подзаголовка».

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

Однако, вы не можете разрешить всем перечислять всех пользователей в пуле, это было бы огромной дырой в безопасности. Разрешения на перечисление всех пользователей должны быть зарезервированы за администраторами приложений и только в случае необходимости. Вместо этого вы можете настроить функцию Lambda на AWS, вызываемую через API Gateway. Функция примет sdb в качестве входных данных и вернет адрес электронной почты. Роль, прикрепленная к этой функции, даст ей доступ к вызову ListUsers для вашего пула. Это ограничит объем информации, которую ваши пользователи могут получить о других, но ваша Lambda все равно должна запускать проверки, чтобы убедиться, что ею не злоупотребляют. Например, если пользователь X хочет получить адрес электронной почты пользователя Y, пользователь Y должен заранее утвердить это.

Я не знаю вашего варианта использования, но в целом, позволять кому-либо получать информацию о любом пользователе вашего приложения следует делать с осторожностью. Любое взаимодействие между пользователями должно быть для них прозрачным и согласованным. Имейте в виду, что пользователи могут войти в Cognito из-за пределов вашего приложения, если они смогут найти идентификатор приложения и секретный токен. Предоставляя пользователю доступ к чему-либо, подумайте о том, как это может быть использовано не по назначению. Возможно, вы поймете, что вам следует переосмыслить свой подход к проблеме.

Хорошо спасибо. Первую ссылку, которую вы упомянули, я уже нашел, вторую нет. Но оба они не очень полезны в том смысле, что не дают примеров того, как использовать API. Например, если я начну с создания экземпляра объекта типа AWSCognitoIdentityProviderListUsersRequest (чтобы что-то попробовать), первое сообщение, которое я получу, — это «неразрешенный идентификатор», означающий, что в какой-то момент я не использую правильный импорт (или модуль). В этих документах много неписаных предположений, и они очень хороши для людей, которые «уже знают», но не для остальных из нас.

Michel 03.06.2019 03:54

Предполагая, что вам не хватает авторизации для вызова ListUsers, см. обновленный ответ. Если вы не знакомы с Lambda, шлюзом API и пулами удостоверений, правильное выполнение этого потребует немало работы. Возможно, вы захотите рассмотреть другие пути.

bgdnlp 03.06.2019 08:05

Я начал читать упомянутый вами блог. Хотя не полностью. Кстати: разрешение доступа к списку пользователей такое же, как разрешение доступа к таблице DynamoDB? ..... У меня сложилось впечатление, что для меня лучше всего будет использовать лямбда-функцию. Мой вариант использования заключается в том, что я хочу, чтобы 2 пользователя могли подключаться вместе, если они того пожелают.

Michel 03.06.2019 08:48

Тот же принцип, да. Все сводится к предоставлению пользователю доступа к API. Взаимодействие с DynamoDB осуществляется через вызовы API. Мне кажется, что вам предстоит много читать о разрешениях IAM, шлюзе API и функциях Lambda. Может быть хорошей идеей пройти курс. Возможно, посмотрите на AWS Amplify. Или найдите кого-нибудь, кто может настроить эти вещи для вас, если вы предпочитаете сосредоточиться на стороне мобильного приложения. Это много движущихся частей, о которых нужно узнать. Или найти другой, более простой способ сделать это. Например, если вы хотите, чтобы пользователи обменивались электронными письмами, просто попросите их обмениваться сообщениями друг с другом.

bgdnlp 03.06.2019 09:43

Ну да, но учиться не то, что мне не нравится. И я уже получил несколько вещей на AWS. Одна проблема заключается в том, что слова «простой», похоже, не существует в словаре AWS. Кроме того, если у вас есть учебник по AWS Amplify, я был бы счастлив.

Michel 03.06.2019 10:24

Конечно, слово «простой» существует, просто они употребляют его только с сарказмом. А если серьезно, если у вас есть время учиться, это хорошие навыки. Официальная документация обычно хороша, и есть много курсов и руководств. Не могу ничего порекомендовать по Amplify, потому что я им не пользуюсь. Их Сообщения в блоге обычно хорошее начало. Если вы считаете, что мой ответ ответил на ваш вопрос, другим может быть полезно отметить его как таковой.

bgdnlp 03.06.2019 11:15

Впервые я услышал об Amplify в этом уроке: youtube.com/watch?v=1uNtrLZhs5k Но это дало мне стимул делать то, что я хотел. Поэтому я предполагаю, что там есть чему поучиться и чем воспользоваться. Проект, над которым я сейчас работаю (для которого и был написан этот пост), фактически тоже начался там.

Michel 03.06.2019 15:46

Другие вопросы по теме