У меня есть работающее приложение для 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.
Читая мой пост, вы можете заметить, что я даже не дохожу до того момента, когда есть шанс напечатать ошибку (иначе сообщение было бы напечатано... и я бы проверил на возможную ошибку). Для вас 2-й вопрос .... становится интересно: может быть, здесь я начинаю накосячить. Что мне нужно, чтобы пользователь был авторизован для вызова ListUsers? О какой правильной роли вы говорите?
Это API, вы должны получить какой-то ответ. Хотя бы HTTP-код, 200, 401, 403, что-то. Во всяком случае, обновил мой ответ.
Ладно, хорошо; тогда что я сделал не так?





Вы бы действительно использовали API ListUsers.
Здесь — это его документация для AWS iOS SDK. Один из фильтров, которые вы можете применить, предназначен для «подзаголовка».
Пользователь, вызывающий ListUsers, должен иметь назначенную роль, которая предоставит ему доступ к этому API. Взгляните на этот пост в блоге AWS для примера в JS.
Однако, вы не можете разрешить всем перечислять всех пользователей в пуле, это было бы огромной дырой в безопасности. Разрешения на перечисление всех пользователей должны быть зарезервированы за администраторами приложений и только в случае необходимости. Вместо этого вы можете настроить функцию Lambda на AWS, вызываемую через API Gateway. Функция примет sdb в качестве входных данных и вернет адрес электронной почты. Роль, прикрепленная к этой функции, даст ей доступ к вызову ListUsers для вашего пула. Это ограничит объем информации, которую ваши пользователи могут получить о других, но ваша Lambda все равно должна запускать проверки, чтобы убедиться, что ею не злоупотребляют. Например, если пользователь X хочет получить адрес электронной почты пользователя Y, пользователь Y должен заранее утвердить это.
Я не знаю вашего варианта использования, но в целом, позволять кому-либо получать информацию о любом пользователе вашего приложения следует делать с осторожностью. Любое взаимодействие между пользователями должно быть для них прозрачным и согласованным. Имейте в виду, что пользователи могут войти в Cognito из-за пределов вашего приложения, если они смогут найти идентификатор приложения и секретный токен. Предоставляя пользователю доступ к чему-либо, подумайте о том, как это может быть использовано не по назначению. Возможно, вы поймете, что вам следует переосмыслить свой подход к проблеме.
Хорошо спасибо. Первую ссылку, которую вы упомянули, я уже нашел, вторую нет. Но оба они не очень полезны в том смысле, что не дают примеров того, как использовать API. Например, если я начну с создания экземпляра объекта типа AWSCognitoIdentityProviderListUsersRequest (чтобы что-то попробовать), первое сообщение, которое я получу, — это «неразрешенный идентификатор», означающий, что в какой-то момент я не использую правильный импорт (или модуль). В этих документах много неписаных предположений, и они очень хороши для людей, которые «уже знают», но не для остальных из нас.
Предполагая, что вам не хватает авторизации для вызова ListUsers, см. обновленный ответ. Если вы не знакомы с Lambda, шлюзом API и пулами удостоверений, правильное выполнение этого потребует немало работы. Возможно, вы захотите рассмотреть другие пути.
Я начал читать упомянутый вами блог. Хотя не полностью. Кстати: разрешение доступа к списку пользователей такое же, как разрешение доступа к таблице DynamoDB? ..... У меня сложилось впечатление, что для меня лучше всего будет использовать лямбда-функцию. Мой вариант использования заключается в том, что я хочу, чтобы 2 пользователя могли подключаться вместе, если они того пожелают.
Тот же принцип, да. Все сводится к предоставлению пользователю доступа к API. Взаимодействие с DynamoDB осуществляется через вызовы API. Мне кажется, что вам предстоит много читать о разрешениях IAM, шлюзе API и функциях Lambda. Может быть хорошей идеей пройти курс. Возможно, посмотрите на AWS Amplify. Или найдите кого-нибудь, кто может настроить эти вещи для вас, если вы предпочитаете сосредоточиться на стороне мобильного приложения. Это много движущихся частей, о которых нужно узнать. Или найти другой, более простой способ сделать это. Например, если вы хотите, чтобы пользователи обменивались электронными письмами, просто попросите их обмениваться сообщениями друг с другом.
Ну да, но учиться не то, что мне не нравится. И я уже получил несколько вещей на AWS. Одна проблема заключается в том, что слова «простой», похоже, не существует в словаре AWS. Кроме того, если у вас есть учебник по AWS Amplify, я был бы счастлив.
Конечно, слово «простой» существует, просто они употребляют его только с сарказмом. А если серьезно, если у вас есть время учиться, это хорошие навыки. Официальная документация обычно хороша, и есть много курсов и руководств. Не могу ничего порекомендовать по Amplify, потому что я им не пользуюсь. Их Сообщения в блоге обычно хорошее начало. Если вы считаете, что мой ответ ответил на ваш вопрос, другим может быть полезно отметить его как таковой.
Впервые я услышал об Amplify в этом уроке: youtube.com/watch?v=1uNtrLZhs5k Но это дало мне стимул делать то, что я хотел. Поэтому я предполагаю, что там есть чему поучиться и чем воспользоваться. Проект, над которым я сейчас работаю (для которого и был написан этот пост), фактически тоже начался там.
Какая у вас ошибка? Авторизован ли пользователь для вызова ListUsers? У вас есть пул удостоверений, настроенный с соответствующей ролью?