Cognito: идентификатор федеративного удостоверения и атрибуты пользователя

История:

У меня есть пул пользователей Cognito с пользователями.

Этот пул пользователей является поставщиком аутентификации в пуле федеративных удостоверений.

У меня есть корзина S3, в которой пользователи ограничены загрузкой по частному пути через политику в роли Auth следующим образом:

arn: aws: s3 ::: BUCKET_NAME / $ {cognito-identity.amazonaws.com:sub}/*

Пользователи загружают файлы прямо из веб-браузера через sdk aws javascript.

Теперь это отлично работает, и мои пользователи ограничены тем, куда они загружают. Файлы, которые они загружают, имеют следующие пути в корзине:

us-east-1: 0f26319c-1233-4c71-afb6-fac96a798ffb / random_file_name.txt

Затем у меня есть лямбда, которая запускается из этого ведра S3 всякий раз, когда добавляется файл. Чтобы уточнить, пользователь НЕ вызывает лямбда

Проблема:

Я хотел бы получить доступ к пользовательским атрибутам в пользовательском пуле из lamda. Я подумал, что могу сделать этот поиск, используя подпрограмму когнитивной идентификации. Однако я не могу найти способ использовать API SDK, чтобы разрешить это.

Используя этот api: http://boto3.readthedocs.io/en/latest/reference/services/cognito-identity.html#CognitoIdentity.Client.describe_identity Я могу получить логин / пул пользователей, но не имя пользователя, связанное с этим идентификатором личности.

Если бы у меня было имя пользователя, я мог бы использовать api: http://boto3.readthedocs.io/en/latest/reference/services/cognito-idp.html?highlight=cognito#CognitoIdentityProvider.Client.admin_get_user

Есть идеи, как я могу использовать Federated Identity ID для поиска атрибутов пользователя?


person bleuf1shi    schedule 23.03.2017    source источник
comment
Доступно ли имя пользователя для кода в браузере?   -  person talentedmrjones    schedule 23.03.2017
comment
@talentedmrjones это так. Однако, если я использую атрибуты пользователя для отслеживания квоты хранилища пользователей. Это означает, что любой пользователь может отправить любое имя пользователя, которое он хочет. А поскольку имена пользователей обычно представляют собой электронные письма, было бы относительно легко притвориться кем-то другим.   -  person bleuf1shi    schedule 23.03.2017


Ответы (2)


Как насчет хранения файлов в
arn:aws:s3:::BUCKET_NAME/${cognito-idp.us-east-1.amazonaws.com:sub}

Это будет преобразовано в имена папок, например
f4cfd4a8-0e94-4287-8c5e-1b01538dd2a1

Используя этого sub пользователя из пула пользователей Cognito, вы можете перечислить пользователей с этой подпиской, например, в cli:
aws cognito-idp list-users --user-pool-id=us-east-1_ndhjGJQYE --filter "sub = 'f4cfd4a8-0e94-4287-8c5e-example'"

person Vitaly Zdanevich    schedule 16.01.2018
comment
sub из cognito-idp.<aws-region>.amazonaws.com:sub на самом деле является федеративным идентификатором, который не совпадает с user-pool's sub. Следовательно, это неправильный ответ. - person Yman; 09.07.2018

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

person Theo    schedule 31.03.2020