无法获得"经过身份验证的ID"对于Cognito凭证

时间:2018-04-25 05:50:10

标签: amazon-web-services aws-cognito

我是AWS初学者,一直在研究Cognito。

我已成功创建了一个非常简单的S3 + cognito + lambda(通过API网关)系统,其中authtoken用于对lambda的API调用的标头中(在作为cognito用户有效登录之后)。

现在我正在使用没有lambda的S3 + cognito + dynamodb流程,其中javascript(在浏览器中)直接访问dynamodb(在作为cognito用户有效登录之后)。

this AWS reference 给了我很多帮助,但我仍然无法成功......

这是我的代码:

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开发人员工具)显示,

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

没有&#34;登录&#34; AWS.CognitoIdentityCredentials的参数,没关系。  (&#34; Cognito Identify Id:&#34;显示返回的Id)。但这是&#34;未经认证的&#34;。因此,为了允许dynamoDB访问,我必须将所需的策略附加到在联合身份mgmt期间自动创建的Cognito_myIDPoolName_UnauthRole。 我想避免将这种额外的政策附加到未经身份验证的用户身上。 任何建议将受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

在一年后发出声音,是因为我为解决同一个问题感到头疼,您的问题是您将“ provider”作为关键,而不是提供者的变量:

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

希望这可以帮助其他人将来碰到同样的屁!