我尝试整合AWS cognito用户池,但我觉得它不再安全了。因为登录时接收的id令牌包含用户池ID。使用该用户池ID,任何人都可以访问用户详细信息列表。
示例 - 下面显示了我的id_token数据,在那里我可以清楚地看到我的用户池ID在iss字段中(us-east-1_i1SXXXXX)
因此,使用该用户池ID,我可以检索列表用户,然后编辑任何用户详细信息。
检索用户详细信息 -
var AWS = require('aws-sdk');
var AWSCognito = require('amazon-cognito-identity-js');
var util = require('util');
var params = {
Username: '',
Password: '',
UserPoolId: 'us-east-1_i1SGXXXXX', // just paste id token user pool
ClientId: 'ZZZZZZZZZZ', // just random string
AWSRegion: 'us-east-1' //region
}
AWS.config.update({region: params.AWSRegion});
var poolData = {
UserPoolId : params.UserPoolId,
ClientId : params.ClientId
};
var userPool = new AWSCognito.CognitoUserPool(poolData);
var userData = {
Username : params.Username,
Pool : userPool
};
var cognitoUser = new AWSCognito.CognitoUser(userData);
var cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider();
cognitoidentityserviceprovider.listUsers({UserPoolId: params.UserPoolId}, function(err, data) {
if (err) {
console.log(err, err.stack);
} else {
console.log(data.Users);
}
});

最后,您可以编辑用户详细信息 -
var AWS = require('aws-sdk');
var AWSCognito = require('amazon-cognito-identity-js');
var util = require('util');
global.navigator = () => null;
var params = {
Username: '',
Password: '',
UserPoolId: 'us-east-1_i1SGXXXXX',
ClientId: '',
IdentityPoolId: '',
AWSRegion: 'us-east-1'
}
AWS.config.update({
region: params.AWSRegion
});
var authenticationData = {
Username: params.Username,
Password: params.Password
};
var cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider();
var params = {
UserAttributes: [{
Name: 'address',
Value: 'address updated'
}
],
UserPoolId: params.UserPoolId,
/* required */
Username: 'XXXXXXX' //add any user id where you retrieve from list of user code
};
cognitoidentityserviceprovider.adminUpdateUserAttributes(params, function (err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});

那你的建议是什么?我在创建idToken时做错了吗?
答案 0 :(得分:1)
如果您拥有id
的{{1}},则不能只是"请问" Cognito关于用户详细信息,因为:
用户池上的访问权限受AWS' IAM(由您/ admin给出),所以也许您没有身份验证 通过IAM在用户池上执行?!我非常怀疑。
显然,如果我的网页编写的Web应用程序可以访问用户池,那么我可以要求它做什么 想要用户池。
此外,您在用户池中的应用设置是什么?
答案 1 :(得分:0)
如果这个问题仍然存在,您是否碰巧在隐式获得Cognito管理员权限的计算机上执行代码?例如,如果它是在笔记本电脑上运行的,笔记本电脑是否具有包含.aws
文件的credentials
目录?如果它作为Lambda函数运行,是否向Lambda函数授予了具有Cognito管理员权限的角色?