我試圖通過使用AWS Cognito和用戶池的API來使用身份驗證工作。我有通過AWS Cognito用戶池創建的用戶,並且正在嘗試與用戶一起登錄。AWS - nodejs SDK - CognitoIdentityServiceProvider.initiateAuth - CredentialsError:在配置中缺少憑據
我得到的錯誤是CredentialsError: Missing credentials in config
。具體來說,它告訴我,我需要一個IdentityPoolId
。但我似乎無法在我的AWS控制檯中找到這個IdentityPoolId
。哪裏可以找到我的用戶池?我看到的只有一個Pool ID和一個Pool ARN。
相關的源代碼:
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
中添加了該部分。
我相關的Authentication Provider
爲Cognito
來,我通過輸入User Pool ID
和App Client ID
爲該用戶池創建我的用戶羣。現在使用相同的代碼Identity pool ID
我得到錯誤CredentialsError: Missing credentials in config
。它說Unauthorized access is not supported for this identity pool
。好的...我試圖授權用戶...我是否需要創建未經身份驗證的角色,以便用戶可以在未通過身份驗證時進行身份驗證?這似乎很愚蠢,如果這是我需要做的。
編輯2:
我也應該注意到,我能夠登錄並獲得一個AccessToken
以及一個IdToken
和RefreshToken
使用JavaScript SDK(沒有的NodeJS)。我做了這個,不需要IdentityPoolId
。我唯一需要的是UserPoolId
和ClientId
。
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);
}
});
}