当前位置: 首页 > 知识库问答 >
问题:

Amazon Cognito“respondtoAuthChallenge”-返回NotAuthorizedException,错误的用户名或密码

潘彦
2023-03-14

现在我想在UserPool中授权用户。我关注这个链接--https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow.html-client-side Authentication flow。但是“respondtoAuthChallenge”-返回NotAuthorizedException,错误的用户名或密码。

import * as AWS from 'aws-sdk'
import { SRPClient, calculateSignature, getNowString } from 'amazon-user-pool-srp-client'


const userPoolId = 'XXX'
const ClientId = 'XXX'

const verifyUser = () => {
    AWS.config.region = 'us-west-2'
    const srp = new SRPClient(userPoolId)
    const SRP_A = srp.calculateA()
    var params = {
      AuthFlow: 'USER_SRP_AUTH',
      ClientId,
      AuthParameters: {
        USERNAME: formState.email,
        SRP_A,
      },
    }
    let cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider()
    cognitoidentityserviceprovider.initiateAuth(params, function (err, data) {
      if (err) {
        const error = err.message ? err.message : err
        console.log(error)
      }
      else {
        console.log(data) // --> data.session is undefined
        if (data.ChallengeParameters && data.ChallengeName) {
          const passwordAuthenticationKey =
            srp.getPasswordAuthenticationKey(
              data.ChallengeParameters.USER_ID_FOR_SRP,
              formState.password,
              data.ChallengeParameters.SRP_B,
              data.ChallengeParameters.SALT
            )
          const dateNow = getNowString()
          const signatureString = calculateSignature(
            passwordAuthenticationKey,
            userPoolId,
            data.ChallengeParameters.USER_ID_FOR_SRP,
            data.ChallengeParameters.SECRET_BLOCK, dateNow
          )

          var params = {
            ChallengeName: data.ChallengeName,
            ClientId,
            ChallengeResponses: {
              // PASSWORD_VERIFIER
              PASSWORD_CLAIM_SIGNATURE: signatureString,
              PASSWORD_CLAIM_SECRET_BLOCK: data.ChallengeParameters.SECRET_BLOCK,
              TIMESTAMP: dateNow,
              USERNAME: data.ChallengeParameters.USER_ID_FOR_SRP,
            },
            Session: data.Session, // undefined
          };
          cognitoidentityserviceprovider.respondToAuthChallenge(params, function (err, data) {
            if (err) {
              const error = err.message ? err.message : err
              console.log(error) // Incorrect username or password
            }
            else {
              console.log(data)
            }
          })
        }
      }
    })
  }

我创建了不同的用户,但没有运气。用户已注册,但respondToAuthChallenge引发错误。InitiateAuth响应返回ChalleneName和challengeParameters,但不提供会话。

我发现了一个我无法理解的语句--“当RespondToAuthChallenge Production of password的下一个操作运行时,Amazon Cognito返回一个通用的NotAuthorizedException错误,指示用户名或密码不正确。”在https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-management-errors.html中

如果你有任何解决方案/想法,请告诉我,谢谢!!

共有1个答案

敖子安
2023-03-14

首先,基于RespondToAuthChallenge文档,Session字段不是必需字段,因此如果没有提供Session字段,您甚至不需要为PASSWORD_VERIFIER质询传递Session字段。

其次,是否可以包含完整的错误消息以及从initiateAuth和respondToAuthChallenge操作获得的响应,以便我查看一下?

还要记住,来自initiateAuth操作的响应中的session字段是“session”,大写字母是“s”(这里是initiateAuth操作的文档),所以您必须用data.session取回session值,而不是data.session。

 类似资料:
  • 在cognito用户池中,我有两个不同的组:Admin 现在我想授权userpool中的用户。我正在关注这个链接-https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow.html -客户端身份验证流。但是“RespondToAuthChalleng

  • 我想知道我是否以正确的方式编写了泽西客户端代码。 登录页面应该在输入正确的用户名和密码后重定向到主页,服务器端返回一个空字符串()。如果其中一个不正确,服务器端代码返回。 页面功能运行良好,但当我使用正确的用户名和密码对使用客户端代码进行测试时,它返回,响应返回200OK。下面是我的客户端代码。 我怀疑用户名和密码没有按HTML文件要求的正确输入位置提交。下面是我的HTML文件块。

  • 我有一个项目托管在GitHub上。我在尝试将我的修改推到主控器上时失败了。我总是收到以下错误消息 但是,将我的ssh键设置为github似乎可以。实际上,当我执行时,我得到了 这似乎表明从那方面来看一切都是正常的(eurydyce是我的github用户名)。我严格遵循了github上给出的说明和许多堆栈讨论的建议,但没有办法。你知道我做错了什么吗?

  • 我正在使用以下代码创建一个加密的PDF文件: 我省略了创建单元格和表格的代码,以及创建可以在其中输入firstname、lastname等值的表单的代码。 然后我这样操作表单。

  • 问题内容: 我试图在Go项目的默认模板上使用GitHub上Go项目的CircleCI。 作为参考,这里的默认是什么 样子 : 作业运行时,我得到一个与代码本身完全无关的错误。 returned incorrect signature type There is no tracking information for the current branch. Please specify which

  • 用户:用户名=>{密码:哈希,年龄:45} 用户:0=>{USERNAME:USERNAME,password:HASH,年龄:45} 请注意,我希望通过名称查找用户,因此需要第二组键值来将用户名与ID相关联。 考虑到每个用户名都是唯一的,并且必须是字母数字的,是否有任何特殊的原因来说明使用ID系统可能是有益的。 附言。由于Redis处理哈希的方式,我实际上不确定这两种方法之间的内存差异,所以关于