Невозможно получить «удостоверенный идентификатор» для учетных данных Cognito - PullRequest
0 голосов
/ 25 апреля 2018

Я новичок в AWS, изучаю Cognito.

Я успешно создал очень простую систему S3 + cognito + lambda (через шлюз API), в которой authtoken использовался в заголовках вызова API к lambda (после действительного входа в систему как пользователь cognito).

Сейчас я работаю над потоком S3 + cognito + DynamoDB без лямбды, где javascript (в браузере) имеет прямой доступ к DynamodB (после действительного входа в систему как пользователь cognito).

эта ссылка AWS мне очень помогла, но я все еще не могу добиться успеха ..

Вот мой код:

var cognitoUser =userPool.getCurrentUser();
AWS.config.region = _config.cognito.region;          
cognitoUser.getSession(function(err,result) {
  if (result) {
      var UserPoolId = _config.cognito.userPoolId;  
      console.log("you are now logged in to userpool:"+UserPoolId);

  var provider ='cognitoidp.'+_config.cognito.region+'.amazonaws.com/'+UserPoolId;
  console.log('provider:'+provider);

  AWS.config.credentials = new AWS.CognitoIdentityCredentials({
           IdentityPoolId: _config.cognito.IdentityPoolId,
              Logins: {
                    provider: result.getIdToken().getJwtToken()
               }
             });

            }
         });
         AWS.config.credentials.get(function(err) {
         if (!err) {
            console.log("Cognito Identify Id: " + AWS.config.credentials.identityId);
         }
         else {
               console.log(err, err.stack);
         }
         });

    ... dynamodb operation.. 

Журнал консоли (с помощью Chrome Developer Tool) показывает,

view.js:78 you are now logged in to userpool:ap-northeast-1_XXXXXXXXX
view.js:81 provider:cognito-idp.ap-northeast-1.amazonaws.com/ap-northeast-1_XXXXXXXXX

cognito-identity.ap-northeast-1.amazonaws.com/:1 POST https://cognito-identity.ap-northeast-1.amazonaws.com/ 400 (Bad Request)
view.js:101 Error: Invalid login token. Issuer doesn't match providerName


    at constructor.i (aws-sdk-2.226.1.min.js:49)
    at constructor.callListeners (aws-sdk-2.226.1.min.js:50)
    at constructor.emit (aws-sdk-2.226.1.min.js:50)
    at constructor.emitEvent (aws-sdk-2.226.1.min.js:50)
    at constructor.e (aws-sdk-2.226.1.min.js:49)
    at a.runTo (aws-sdk-2.226.1.min.js:51)
    at aws-sdk-2.226.1.min.js:51
    at constructor.<anonymous> (aws-sdk-2.226.1.min.js:49)
    at constructor.<anonymous> (aws-sdk-2.226.1.min.js:50)
    at constructor.callListeners (aws-sdk-2.226.1.min.js:50) 

    "NotAuthorizedException: Invalid login token. Issuer doesn't match providerName

Без параметров "Logins" для AWS.CognitoIdentityCredentials все в порядке. («Cognito Identify Id:» показывает возвращенный Id). Но это «неаутентифицировано». таким образом, чтобы разрешить доступ к DynamoDB, мне пришлось прикрепить требуемую политику к Cognito_myIDPoolName_UnauthRole, который был автоматически создан во время создания федеративного удостоверения mgmt. Я хотел бы избежать такого дополнительного присоединения политики к неаутентифицированному пользователю .. Любой совет будет высоко ценится.

1 Ответ

0 голосов
/ 08 июля 2019

Перезвон через год, потому что я чувствую себя таким огромным тупиком, что бьюсь головой об одной и той же проблеме, ваша проблема в том, что вы передаете "provider" как ключ, а не значение переменнойпровайдера:

  Logins: {
    [provider]: result.getIdToken().getJwtToken()
  }

Надеюсь, это поможет кому-то еще столкнуться с тем же пердением мозга в будущем!

...