Демоверсия 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