Демонстрация AWS Cognito Saas: как получить «токен доступа (с политиками IAM)?» - PullRequest
0 голосов
/ 29 августа 2018

Настройка Я работаю через «Идентификация и изоляция Saas с Amazon Cognito» развертывание руководство и сопровождающий исходный код .

После развертывания, тестирования и чтения всего я смог выяснить

  • Как работать с пользователями / пулами пользователей Cognito для каждого арендатора
  • Как создавать роли для арендатора
  • Как создать политику на основе арендатора
  • Как создавать пулы удостоверений для каждого арендатора

Главный вопрос Как все это связать вместе? В частности, как пользователь в пуле пользователей-арендаторов связывается с политикой в ​​пуле удостоверений? Кажется, что-то размахивает рукой вокруг «Получить токен доступа (с политиками IAM)». Как это работает? Как вписываются пользовательские авторизаторы?

Дополнительная информация Я считаю, что это связано с token-manager.js: 346

var cognitoidentity = new AWS.CognitoIdentity({apiVersion: '2014-06-30',region: configuration.aws_region});
var params = {
    IdentityId: event.IdentityId, /* required */
    //CustomRoleArn: 'STRING_VALUE',
    Logins: {
        [event.provider]: event.token,
        /* '<IdentityProviderName>': ... */
    }
};
cognitoidentity.getCredentialsForIdentity(params, function (err, data) {

Я вижу, что getCredentialsForIdentity задокументировано для получения CustomRoleArn, как показано ниже. Код выше закомментировал это, но код все еще работает.

var params = {
  IdentityId: 'STRING_VALUE', /* required */
  CustomRoleArn: 'STRING_VALUE',
  Logins: {
    '<IdentityProviderName>': 'STRING_VALUE',
    /* '<IdentityProviderName>': ... */
  }
};

Custom Authorizer Единственный код в custom-authorizer / index.js , который я могу найти по отношению к разрешению / политике:

var policy = new AuthPolicy(principalId, awsAccountId, apiOptions);
policy.allowAllMethods();
const authResponse = policy.build();

<<em> Gasp > Этот код создает впечатление, что мы обходим все политики. Возможно ли, что это приложение имитирует его и обрабатывает только маршрутизацию в Angular? Возможно нет.

Дополнительный вопрос Я смог извлечь почти все, что мне нужно, с помощью AWS PowerShell . Единственное, что я не знаю, как получить, это провайдер идентификации пула пользователей. Для командлета Get-CGIPIdentityProvider требуется имя "ProviderName". Что это? "Cognito"? "Www.amazon.com"? Какой-то идентификатор?

Повтор Основной вопрос на тот случай, если вы просто прокрутите страницу вниз. Как все это связать вместе? В частности, как пользователь в пуле пользователей-арендаторов связывается с политикой в ​​пуле удостоверений? Кажется, что-то размахивает рукой вокруг «Получить токен доступа (с политиками IAM)». Как это работает? Как вписываются пользовательские авторизаторы?

1 Ответ

0 голосов
/ 31 августа 2018

Роли внутренне связаны пулами идентификаторов Cognito. Следующий код показывает, что мы отображаем это через конфигурацию.

cognito-user.js: 911 - addRoleToIdentity

var cognitoidentity = new AWS.CognitoIdentity(...);

# [ ... ]

RulesConfiguration: {
    Rules: [/* required */
        {
        Claim: 'custom:role', /* required */
        MatchType: 'Equals', /* required */
        RoleARN: identityPoolRoleParams.rolesystem, /* required */
        Value: identityPoolRoleParams.adminRoleName /* required */
        },
        {
        Claim: 'custom:role', /* required */
        MatchType: 'Equals', /* required */
        RoleARN: identityPoolRoleParams.rolesupportOnly, /* required */
        Value: identityPoolRoleParams.userRoleName /* required */
        },
    ]
cognitoidentity.setIdentityPoolRoles(params, function (err, data) {

# [ ... ]

Эта конфигурация может быть представлена ​​следующим псевдо-кодом, где user.'custom: role 'является строкой.

const user = userpool.getuser(...)
if (user.'custom:role' == identityPoolRoleParams.adminRoleName)
    role = identityPoolRoleParams.roleSystem
else if (user.'custom:role' == identityPoolRoleParams.userRoleName) 
    role = identityPoolRoleParams.rolessupportOnly
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...