ResourceNotFoundException:用户池客户端 ****** 不存在

问题描述 投票:0回答:4

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

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

如果这不起作用,我就快要哭得像个婴儿了

javascript node.js amazon-web-services amazon-cognito
4个回答
2
投票

错误告诉我检查客户端 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


2
投票

经过一番挖掘,我发现在我的情况下(使用SAM进行测试),只要我在

accessKeyId
目录下的
secretAccessKey
文件中提供
credentials
.aws
,我就没有需要将它们添加到代码本身中。

导致 AWS 无法识别客户端 ID 的实际问题是,由于某种原因,我的环境没有从我在

~/.aws/config
中指定的配置文件中检索区域。 它只是使用默认配置文件的区域,这显然不是正确的区域。

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

  1. 在计算机用户文件夹的根目录中创建一个目录
    .aws
    。里面应该有 2 个文件
    credentials
    config
    。没有文件扩展名。
  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 自动选择正确的区域等。


0
投票

我认为如果我首先使用initiate_auth方法并将响应放入客户端变量中,我可以从客户端变量调用list_groups方法。但是,有必要使用 aws_access_key_id、aws_secret_access_key 和 role_arn 将默认配置文件设置到 ~/.aws/credentials 中。

[default]
aws_secret_key_id = "asdfsafas"
aws_secret_access_key = "asdfsfs"
role_arn = "arn:aws:iam......:role:blablabla"

0
投票

就我而言,请检查您的客户端 ID 是否仍然存在。

由于您无法真正重命名池客户端,因此您必须拆除旧的用户池客户端,然后创建一个新的用户池客户端,这显然会创建一个新的客户端 id。

© www.soinside.com 2019 - 2024. All rights reserved.