gpt4 book ai didi

node.js - AWS - nodejs SDK - CognitoIdentityServiceProvider.initiateAuth - CredentialsError : Missing credentials in config

转载 作者:搜寻专家 更新时间:2023-10-31 22:44:53 25 4
gpt4 key购买 nike

我正在尝试使用带有用户池的 AWS Cognito 通过我的 API 进行身份验证。我有一个通过 AWS Cognito 用户池创建的用户,我正在尝试使用该用户登录。

我收到的错误是 CredentialsError: Missing credentials in config。具体来说,它告诉我我需要一个 IdentityPoolId。但我似乎无法在我的 AWS 控制台中找到此 IdentityPoolId。对于我的用户池,我到底从哪里得到这个?我只看到一个池 ID 和一个池 ARN。

enter image description here

相关源码:

var aws = require('aws-sdk');
aws.config.update({
region: 'us-east-1',
credentials: new aws.CognitoIdentityCredentials({
IdentityPoolId: '???'
})
});


var authUser = function(params, callback)
{
if (!params || !params.Email || !params._password)
{
callback(new Error('Invalid parameters.'));
return false;
}

var cognito = new aws.CognitoIdentityServiceProvider();

var authParams = {
AuthFlow: 'USER_SRP_AUTH', // not sure what this means...
ClientId: conf.AWSConfig.ClientId,
AuthParameters: {
Username: params.Email,
Password: params._password
}
};

cognito.initiateAuth(authParams, function(err, data)
{
if (err)
{
console.log('Error details: ' + util.inspect(err));
callback(err);
return false;
}
callback(null, {success: true, data: data});
});
}

对于 authParams 对象,我不确定 AuthFlow 应该是什么。看着http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CognitoIdentityServiceProvider.html#initiateAuth-property USER_SRP_AUTH 似乎是我应该使用的。

编辑:

我相信我可能已经找到了获取我的 IdentityPoolId 的位置。我查看了我的 Federated Identities 部分,并在编辑身份池时在 Authentication Providers 部分下添加了适当的 User Pool

enter image description here

我将 CognitoAuthentication Provider 关联到我通过输入 User Pool IDApp Client 创建的用户池该用户池的 ID。现在使用相同的代码使用 Identity pool ID 我收到错误 CredentialsError: Missing credentials in config。它说 此身份池不支持未经授权的访问。好的......我正在尝试授权用户......我是否需要创建一个未经身份验证的角色以便用户在未经过身份验证时可以进行身份​​验证?如果那是我需要做的,那似乎很愚蠢。

编辑 2:

我还应该注意到,我能够使用 Javascript SDK 登录并获取 AccessToken 以及 IdTokenRefreshToken (不是 Node )。我这样做时不需要 IdentityPoolId。我唯一需要的是 UserPoolIdClientId

var authenticateUser = function(onSuccessCallback)
{
var authData = {
Username: getUserName(), // gets username from an html text field
Password: getPassword() // gets password from an html password field
};

var authDetails = new AWSCognito.CognitoIdentityServiceProvider.AuthenticationDetails(authData);

var cognitoUser = getCognitoUser();

cognitoUser.authenticateUser(authDetails,
{
onSuccess: function(result)
{
console.log('access token: ' + result.getAccessToken().getJwtToken());
console.log('idToken: ' + result.idToken.jwtToken);
console.log(result);

if (onSuccessCallback && typeof(onSuccessCallback) == 'function')
{
onSuccessCallback(cognitoUser);
}
},
onFailure: function(err)
{
// UserNotConfirmedException: User is not confirmed.
console.log('authError');
alert(err);
}
});
}

最佳答案

原来 initiateAuth 根本不是我想做的。我还缺少一个名为 amazon-cognito-identity-js 的 npm 包。安装后我更新了我的代码如下:

var authUser = function(params, callback)
{
if (!params || !params.Email || !params._password)
{
callback(new Error('Invalid parameters.'));
return false;
}

var poolData = {
UserPoolId: conf.AWSConfig.UserPoolId,
ClientId: conf.AWSConfig.ClientId
};

var userPool = new aws.CognitoIdentityServiceProvider.CognitoUserPool(poolData);
var authData = {
Username: params.Email,
Password: params._password
};

var authDetails = new aws.CognitoIdentityServiceProvider.AuthenticationDetails(authData);
var userData = {
Username: params.Email,
Pool: userPool
};

var cognitoUser = new aws.CognitoIdentityServiceProvider.CognitoUser(userData);

cognitoUser.authenticateUser(authDetails, {
onSuccess: function(result)
{
callback(null, {success: true, data: result});
},
onFailure: function(err)
{
console.log('authUser error: ' + util.inspect(err));
callback(err);
}
});
}

我现在成功获得了带有 token 的响应!万岁!

关于node.js - AWS - nodejs SDK - CognitoIdentityServiceProvider.initiateAuth - CredentialsError : Missing credentials in config,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43235877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com