Демоверсия AWS Cognito Saas: как получить "токен доступа (с политиками IAM)?"

Настройка Я работаю над руководством по развертыванию 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();

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

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

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

1 ответ

Решение

Роли внутренне связаны пулами идентификаторов 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
Другие вопросы по тегам