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

Amazon Cognito“RespondToAuthChallenge”-返回NotAuthorizedException、不正确的用户名或密码

子车安和
2023-03-14

在cognito用户池中,我有两个不同的组:Admin

现在我想授权userpool中的用户。我正在关注这个链接-https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow.html -客户端身份验证流。但是“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)
            }
          })
        }
      }
    })
  }

我创建了不同的用户,但没有运气。用户注册,但响应ToAuthChallenge抛出错误。发起认证响应返回挑战名称和挑战参数,但不提供会话。

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

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

共有1个答案

哈扬
2023-03-14

首先,根据RespondToAuthChallenge文档,Session字段不是必填字段,因此如果没有提供,您甚至不需要将其传递给PASSWORD\u VERIFIER质询。

第二,您能否包含完整的错误消息以及从initiateAuth和respondToAuthChallenge操作中得到的响应,以便我可以查看一下?

还请记住,initiateAuth操作的响应中的会话字段是带大写字母“S”的“session”(这里是initiateAuth操作的文档),因此您必须使用data.session来获取会话值,而不是data.session。

 类似资料:
  • 现在我想在UserPool中授权用户。我关注这个链接--https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow.html-client-side Authentication flow。但是“respondtoAuthChallenge”-返回No

  • 我有一个PHP网页,其中我配置了aws sdk并实例化了cognito客户机。客户机也配置了一个客户机密码,并且启用了auth flows USER\u PASSWORD\u auth、USER\u SRP\u auth。具有基本身份验证流类型USER\u PASSWORD\u auth的initiateAuth对我来说很好。下面是我尝试过的示例用法- 通过这种方式,我们获得了一个带有access

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

  • 我正在尝试获取关于用户使用哪个浏览器调用API的信息。我在网上搜索,似乎应该使用来自请求头的“用户-代理”。 这里会有什么问题?为什么头球会出错? 提前谢谢!

  • 问题内容: 这里发布了一个类似的问题:REST API服务针对验证失败返回什么合适的HTTP状态代码? 上面线程中的答案指出:“例如,如果URI应该具有ISO-8601日期,而您发现它的格式错误或引用的日期是2月31日,则您将返回HTTP 400。实体主体中格式正确的XML,并且无法解析。” 但是,如果用户提交了正确格式的数据会怎样?我的意思是,用户为用户名和密码提交了纯字母字符串/文本(这对我的

  • 这里发布了一个类似的问题:对于验证失败,REST API服务返回的适当HTTP状态代码是什么? 但是,如果用户提交了正确格式的数据,会发生什么呢?我的意思是,用户为用户名和密码提交了一个按字母顺序排列的字符串/文本(这对我的应用程序完全有效)。唯一的问题是密码与用户名不匹配。在这种情况下,400将是不正确的,因为它是完全有效的语法和格式良好的。 401将是不正确的(正如这里所建议的:哪个HTTP状