Как обновить атрибут пользователя в качестве администратора с помощью Cognito SDK - PullRequest
2 голосов
/ 19 октября 2019

Я создаю угловое приложение, в которое я хочу добавить аутентификацию через AWS Cognito (я довольно новичок в AWS). Я успешно добавил функциональность для регистрации, входа, выхода, mfa и многого другого. Кроме того, я хочу создать что-то вроде админ-панели, где администраторы могут изменять общие атрибуты пользователей. Но я не уверен, как реализовать эти вещи администратора. Как администраторы должны войти в систему? Как администраторы должны зарегистрироваться? Есть ли для них выделенный пул пользователей? А потом, как управлять (изменять атрибуты) обычными пользователями в качестве администратора?

Я ознакомился с документацией AWS, но она недостаточно ясна. Я вижу, что есть какие-то действия с префиксом Admin, например AdminUpdateUserAttributes, но я не совсем уверен, как их использовать.

Редактировать: я пробовал что-то вроде этого:

const AWS = require('aws-sdk');
let cognitoIdentityServiceProvider = new AWS.CognitoIdentityServiceProvider({apiVersion: '2016-04-18'});

let params = {
    UserAttributes: [{
        Name: 'custom:state',
        Value: this.newValue
    }],
    UserPoolId: 'us-east-1_example',
    Username: this.username
};
cognitoIdentityServiceProvider.adminUpdateUserAttributes(params, function(err, data) {
    // do something with result
    err && console.error(err);
    data && console.log(data);
});

Но я получаю следующую ошибку: CredentialsError: Missing credentials in config

Как мне установить эти учетные данные?

1 Ответ

0 голосов
/ 24 октября 2019

Чтобы иметь права доступа admin , необходимо предоставить accessKeyId и secretAccessKey или idToken. Один из способов сделать это - получить эти ключи из консоли управления AWS. Их можно извлечь из роли IAM, у которой есть разрешения на изменение желаемого пула пользователей. Затем вы можете сделать:

AWS.config.update({accessKeyId: '...', secretAccessKey: '...'});

Что я лично сделал в своем приложении, так это создал еще один пул пользователей для администраторов. Затем я добавил этот пул пользователей в качестве поставщика удостоверений в пул удостоверений. Затем я отредактировал роль Авторизованного IAM, чтобы иметь возможность редактировать пул пользователей с обычными пользователями.

У меня сработало следующее:

const userPool = new CognitoUserPool({
  UserPoolId: this.adminUserPoolId,
  ClientId: this.adminClientId
});

const authenticationDetails = new AuthenticationDetails({
  Username: username,
  Password: password
});
const cognitoUser = new CognitoUser({
  Username: username,
  Pool: userPool
});
cognitoUser.authenticateUser(authenticationDetails, ....);

const jwt = cognitoUser.getSignInSession().getIdToken().getJwtToken();
const provider = `cognito-idp.${this.region}.amazonaws.com/${this.adminUserPoolId}`;

AWS.config.update({
  credentials: new CognitoIdentityCredentials({
    IdentityPoolId: this.identityPoolId,
    Logins: {
      [provider]: jwt // when you provide the jwt, accessKeyId and secretAccessKey are extracted
    }
 })
});

const identityService = new CognitoIdentityServiceProvider();
identityService.adminUpdateUserAttributes(...);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...