NodeJS 未找到资源异常:用户池客户端******不存在

yzxexxkh  于 2023-01-30  发布在  Node.js
关注(0)|答案(3)|浏览(122)

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

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

如果不成功我就要哭得像个婴儿了

c2e8gylq

c2e8gylq1#

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

ui7jx7zq

ui7jx7zq2#

在做了一些研究之后,我发现在我的例子中(使用SAM进行测试),只要我在.aws目录的credentials文件中提供accessKeyIdsecretAccessKey,就不需要将它们添加到代码本身中。
导致AWS无法识别客户端ID的实际问题是,由于某种原因,我的环境没有从我在~/.aws/config中指定的配置文件中检索区域,而是使用了默认配置文件的区域,这显然不是正确的区域。
因此,如果有人对一个不必在代码中显式设置id、key或region的解决方案感兴趣,请按照以下步骤创建一个本地环境将自动检测的aws配置文件:
1.在你的电脑用户文件夹的根目录下创建一个.aws目录,里面应该有credentialsconfig两个文件,没有文件扩展名。
1.在配置文件中,您将设置区域和输出:

[default] # this is the profile your system will default to
region = <insert region>
output = json

[profile someNamedProfile]
region = <insert region>
output = json

1.在凭据文件中,设置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自动选择正确的区域等。

9rnv2umw

9rnv2umw3#

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

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

相关问题