AWS Cognito身份验证NotAuthorizedException

3
我正在使用AWS JavaScript SDK来将用户池与我正在构建的Web应用程序集成。用户池已经设置好了,我已经按照这里的用法示例进行了操作:https://github.com/aws/amazon-cognito-identity-js 但是我一直收到一个错误消息,上面写着:"NotAuthorizedException: Unable to verify secret hash for client (我的应用程序客户端ID)"
AWS.config.region = 'us-east-1'; // Region
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
    IdentityPoolId: '...' // my identity pool id here
});


AWSCognito.config.region = 'us-east-1';
AWSCognito.config.credentials = new AWS.CognitoIdentityCredentials({
  IdentityPoolId: '...' // my identity pool id here
})


var poolData = {
  UserPoolId: '...', // my user pool id here
  ClientId: '...'  // client id here
};
var userPool = new AWSCognito.CognitoIdentityServiceProvider.CognitoUserPool(poolData);

var userData = {
    Username : 'username',
    Pool : userPool
};

      var attributeList = [];

      var dataEmail = {
          Name : 'email',
          Value : 'email@mydomain.com'
      };
      var dataPhoneNumber = {
          Name : 'phone_number',
          Value : '+15555555555'
      };
      var attributeEmail = new AWSCognito.CognitoIdentityServiceProvider.CognitoUserAttribute(dataEmail);
      var attributePhoneNumber = new AWSCognito.CognitoIdentityServiceProvider.CognitoUserAttribute(dataPhoneNumber);

      attributeList.push(attributeEmail);
      attributeList.push(attributePhoneNumber);

      userPool.signUp('username', 'password', attributeList, null, function(err, result){
          if (err) {
              alert(err);
              return;
          }
          cognitoUser = result.user;
          console.log('user name is ' + cognitoUser.getUsername());
      });

上面的代码片段是否有任何建议或潜在的问题?谢谢!

你是否缺少 "IdentityPoolId:",我只看到 "..."? - error2007s
@error2007s 不,我的真实代码中有我的身份池ID,我只是不想公开显示它。 - user3567080
4个回答

11

解决这个问题其实很简单。您需要在 AWS 中删除该应用程序,然后重新添加它,但不要添加密钥,这样就可以进行授权。


2
使用Javascript SDK创建Web应用程序时,由于没有地方存储密钥,因此无法使用密钥。这将导致您看到的异常。
正如您发现的那样,创建一个没有密钥的应用程序可以解决此问题。

1
对于JavaScript SDK,Cognito仍不支持“Client Secret”。在创建应用程序客户端时,请确保取消选中“生成秘密”键。 我在使用Java SDK时也遇到了同样的问题。
但这是向AWS Cognito团队提出的问题吗?我们将如何在生产环境中使用客户端秘钥?
暂时,如果有人遇到类似的问题,请删除您的客户端应用并重新创建客户端应用而不生成客户端秘钥。我们仍然期望专业开发人员回答,我们将如何使用客户端秘钥?

你不需要这样做。客户端密钥是用于服务器到服务器授权的。它们用于代替用户名和密码,以在后端系统中进行服务账号授权。行业标准是不要在客户端移动应用程序或 Web 应用程序中使用或放置客户端密钥,因为它们可能会被劫持。 - Johnathon Sullinger

0
在我的情况下,我将 UserPoolId 输入错误。因此,请再次检查您的凭据。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接