Демонстрация 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/index.js, который я могу найти в отношении разрешения/политики:

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

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

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

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


person Phillip Scott Givens    schedule 29.08.2018    source источник


Ответы (1)


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

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
person Phillip Scott Givens    schedule 31.08.2018