Вызов (Admin) InitiateAuthRequest в AWS Cognito Для получения токена доступа с областями действия - PullRequest
0 голосов
/ 20 сентября 2018

Мне нужно предоставить API, который также позволяет нам получить область, но я терплю неудачу со всеми своими попытками использовать aws cognito.

Так что я надеялся сделать следующее:

  1. назначить область действия: foo существующим и новым пользователям
  2. получить обратно токен доступа, содержащий эту область действия foo (используя код конца c #)

Часть I: Получение токена доступа с помощью Scope

Итак, для получения токена необходимо следующее:

var provider = new AmazonCognitoIdentityProviderClient(new BasicAWSCredentials(AccessKey, SecretKey));
var request1 = new AdminInitiateAuthRequest
            {
                UserPoolId = userPoolId,
                ClientId = request.ClientId,
                AuthFlow = AuthFlowType.ADMIN_NO_SRP_AUTH,
                AuthParameters =
                {
                    {"USERNAME", request.UserName},
                    {"PASSWORD", request.Password}
                }
            };
var response1 = await provider.InitiateAuthAsync(request);

Теперь я могу получить токены с помощью этого запроса / ответа (очевидно,с хорошими полномочиями :)).Что я не могу понять, так это попросить больше scope предметов.В настоящее время он возвращает только aws.cognito.signin.user.admin

Часть II: пользовательские атрибуты

С учетом сказанного я также добавил атрибут custom:some-attribute.Я вижу это в интерфейсе для экрана General settings \ Attributes.У меня нет настроек лямбда-триггеров, кстати.

Я обнаружил, что могу обновить пользовательских настроек, так как я получаю статус OK|200, но если я пытаюсьи получить пользователя, его обновленный атрибут не отображается.

var request2 = new AdminUpdateUserAttributesRequest
            {
                UserAttributes = new List<AttributeType>
                    {
                       new AttributeType {
                           Name="custom:some-attribute",
                           Value=Guid.NewGuid().ToString("N")
                    };
                UserPoolId = userPoolId,
                Username = userName
            };

var response2 = await provider.AdminUpdateUserAttributesAsync(request);

Позже я поищу пользователя:

var result = await _provider.GetUserAsync(new GetUserRequest
        {
            AccessToken = response1.AuthenticationResult.AccessToken
        });

... моя недавно обновленная переменная не 'показать в списке result.UserAttribues AttributeType.

Может быть, я делаю это неправильно, но я не могу понять, как создать область (что я думал, я мог бы сделать альтернативу через пользовательский атрибут) и получить область.

Точно так же я не могу понять, как передать область при аутентификации для токенов.

Спасибо, Келли

1 Ответ

0 голосов
/ 20 сентября 2018

Ух ты, я НАКОНЕЦ понял это ...

  1. Я до сих пор не совсем понял это, и было бы здорово, нос пользовательскими атрибутами, входящими (номер 2).Я могу отметить это как ОК.

  2. получение пользовательских атрибутов в токене идентификации.Вы должны установить, чтобы он прочитал запись атрибута.здесь есть больше информации об этом: https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-client-apps.html. В основном выберите область, и она расширяется Attributes, чтобы показать информацию, которую вы можете включить или отключить с областью для чтения и другой для записи.так что, нажмите и нажмите Save app client changes!Обратите внимание, что эти изменения позволят им отображаться в Identity Token.

...