CognitoIdentityCredentials истек - PullRequest
0 голосов
/ 03 мая 2019

Создан IdentityPool и userPool.

Region, AccountId, IdentityPoolId и roleArn, переданные как параметры, содержат правильные значения.

Вызов CognitoIdentityCredentials

AWS.config.region = region;

AWS.config.credentials = new AWS.CognitoIdentityCredentials({
  AccountId: accountId,
  IdentityPoolId: identityPoolId,
  RoleArn: roleArn,
});

возвращает (секретные учетные данные запутаны)

{
    "expired": true,
    "expireTime": null,
    "refreshCallbacks": [],
    "params": {
        "AccountId": "9999999999",
        "IdentityPoolId": "eu-west-2:bcfbd1c9-1234-1234-1234-423be5c3f7d8",
        "RoleArn": "arn:aws:iam: : 999999999:role/Cognito_ElasticSearchIdentityPoolAuth_Role"
    },
    "data": null,
    "_identityId": null,
    "_clientConfig": {}
}

Я ожидаю, что этот вызов вернет accessKeyId и sessionToken.

https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CognitoIdentityCredentials.html

1 Ответ

0 голосов
/ 03 мая 2019

Скопировано из CognitoIdentityCredentials Документация API:

Если указано RoleArn, то этот провайдер получает учетные данные, используя операцию сервиса AWS.STS.assumeRoleWithWebIdentity () , после первого получения токена Open ID из AWS.CognitoIdentity.getOpenIdToken. () . * +1011 *

Следовательно, я предлагаю вам попробовать что-то в этом роде, начиная с CognitoIdentity.getId () :

const getIdParams = {
  IdentityPoolId: // ...
  AccountId: // ...
  Logins: {
    '<IdentityProviderName>': 'STRING_VALUE',
    /* '<IdentityProviderName>': ... */
  }
};
const {IdentityId} = await cognitoidentity.getId(getIdParams).promise();

const openIdTokenParams = {
  IdentityId,
  Logins: {
    '<IdentityProviderName>': 'STRING_VALUE',
    /* '<IdentityProviderName>': ... */
  }
};
const {Token} = await cognitoidentity.getOpenIdToken(openIdTokenParams).promise();

const assumeWebIdentityParams = {
  DurationSeconds: // ...
  ProviderId: // ...
  RoleArn: // ...
  RoleSessionName: // ...
  WebIdentityToken: Token
}
const {Credentials} = await sts.assumeRoleWithWebIdentity(assumeWebIdentityParams).promise();

console.log(Credentials);
// prints AccessKeyId, Expiration, SecretAccessKey and SessionToken
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...