【问题标题】:ResourceNotFoundException: User pool client ****** does not existResourceNotFoundException:用户池客户端 ****** 不存在
【发布时间】:2022-07-28 14:06:31
【问题描述】:

我无法连接到我的应用客户端。以下是我使用的代码:

const AWS = require('aws-sdk');
    // AWS.config.region = 'ap-southeast-2'
    AWS.config.update({ region: 'ap-southeast-2' });
    try {
        var params = {
            AuthFlow: 'ADMIN_NO_SRP_AUTH',
             ClientId: process.env.COGNITO_CLIENT_ID,
            UserPoolId: process.env.COGNITO_USER_POOL_ID,

            AuthParameters: {
                email: "na****@*****.com",
                password: "********",
            }
        };
        console.debug("params: ", params)
//{apiVersion: '2016-04-18'}

        var cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider();

        const res = await cognitoidentityserviceprovider.adminInitiateAuth(params, function (err, data) {
            if (err) {
                console.debug("error adminInitiateAuth. params: ", params);
                console.log("err: ", err);
                
    return { props: { data } }
            } else {

输出是:

err:  ResourceNotFoundException: User pool client ******* does not exist

如果这不起作用,我已经快要开始像婴儿一样哭泣了

【问题讨论】:

  • 你确定你有正确的UserPoolId 还是在ap-southeast-2 中?错误很简单。还将其更改(如果不同)为 ap-southeast-2 您的 aws cli 配置中的区域。

标签: javascript node.js amazon-web-services amazon-cognito


【解决方案1】:

错误是让我检查客户端 ID。

问题在于 AWS 配置。如果我是在 JS 中开发并使用 VS studio 并不重要……该应用程序使用的是我的 Windows 10 AWS 凭据。

我通过代码更改了 AWS.config,现在它可以检测到所有内容。

const AWS = require('aws-sdk'); AWS.config.update({ region: 'ap-southeast-2' }); AWS.config.credentials.accessKeyId = process.env.AWS_IAM_ACCESS_KEY_ID AWS.config.credentials.secretAccessKey = process.env.AWS_IAM_SECRET_ACCESS_KEY

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
【解决方案2】:

经过一番挖掘,我发现在我的情况下(使用SAM测试),只要我在.aws目录下的credentials文件中提供了accessKeyIdsecretAccessKey,我没有不需要将它们添加到代码本身中。

导致 AWS 无法识别客户端 ID 的实际问题是,由于某种原因,我的环境没有从我在 ~/.aws/config 中指定的配置文件中检索区域。它只是使用默认配置文件的区域,这显然不是正确的区域。

因此,如果有人对无需在代码中显式设置 id、密钥或区域的解决方案感兴趣,请按照以下步骤创建本地环境将自动检测的 aws 配置文件:

  1. 在您计算机的用户文件夹的根目录中创建一个目录.aws。在里面,应该有两个文件credentialsconfig。没有文件扩展名。
  2. 在配置文件中,您将设置区域和输出:
    [default] # this is the profile your system will default to
    region = <insert region>
    output = json
    
    [profile someNamedProfile]
    region = <insert region>
    output = json
    
  3. 在凭证文件中,设置您的 accessKeyId 和 secretAccessKey:
    [default]
    aws_access_key_id = <some access key id>
    aws_secret_access_key = <some secret access key>
    
    [someNamedProfile]
    aws_access_key_id = <some access key id>
    aws_secret_access_key = <some secret access key>
    

现在要注意了。出于某种原因,SAM 没有选择指定配置文件的区域。它只从凭证文件中获取 accessKeyId 和 secretAccessKey。因此,如果您希望您的环境使用正确的区域,则必须将您当前要使用的配置文件设置为配置和凭据文件中的默认配置文件。这样做会使 SAM 自动选择正确的区域等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-09
    • 2021-04-18
    • 2018-12-07
    • 1970-01-01
    • 2015-12-05
    • 2017-08-04
    • 1970-01-01
    • 2020-02-21
    相关资源
    最近更新 更多