Аутентификация в AWS в JavaScript - PullRequest
0 голосов
/ 28 июня 2018

Я занимаюсь разработкой одностраничного приложения с бэкэндом REST, в котором используется AWS Cognito для управления пользователями и аутентификации.

Я структурировал его так, что когда пользователь заходит на страницу без токена, происходит следующая последовательность шагов:

  1. Перенаправление на страницу входа по умолчанию в Cognito
  2. Пользователь входит в систему и перенаправляется на хост / authenticate.html
  3. AJAX-вызов отправляется на конечную точку токена Cognito, которая возвращает токены пользователя. Они хранятся в sessionStorage
  4. Пользователь перенаправлен в веб-приложение и теперь проходит проверку подлинности

Я хочу, чтобы в моем приложении было две роли пользователя: Пользователи и Администраторы . Пользователям нельзя разрешать звонить на любые сервисы AWS, где Администраторам должно быть разрешено создавать / приглашать и продвигать других пользователей для администраторов от имени своей компании.

В настоящее время я настроил пул удостоверений для пула пользователей и веб-приложения, который разрешает права администратора. Я проверяю подлинность с помощью пула удостоверений, используя следующий код:

AWS.config.region = "eu-central-1";
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
    IdentityPoolId: 'eu-central-1:<my-indentitypool-id>',
    Logins: {
        'cognito-idp.eu-central-1.amazonaws.com/<my-userpool-id>':
            sessionStorage.getItem('id_token')
    }
});

AWS.config.credentials.get(function(err){
    if (err) {
        console.error(err);
    }
    console.log("Authenticated");
    cisp = new AWS.CognitoIdentityServiceProvider();

});

А когда админ хочет создать пользователя:

cisp.adminCreateUser(params, function(err, data) {
    if (err) 
        console.log(err, err.stack);
    else
        console.log(data);
});

Однако, насколько я понимаю, это позволило бы всем пользователям веб-приложения иметь права Admin , поскольку роль IAM связана с пулом идентификации, а не с пользователями как таковыми.

Есть ли простой способ достичь этого?

Пожалуйста, не стесняйтесь задавать вопросы, если что-то неясно, и заранее спасибо за вашу помощь.

1 Ответ

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

Мне удалось найти решение в конце концов. Если у кого-то возникнут те же проблемы, что и у меня, вы можете перейти на панель управления вашим Cognito Identity Pool и отредактировать его.

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

В моем случае я дал всем аутентифицированным пользователям роль Пользователь и создал условие, показанное на рисунке ниже, которое предоставляет всем пользователям со значением «admin» в «custom: role» Роль Админ.

Identity Pool control panel

...