AWS Cognito如何安全?

时间:2018-02-10 07:33:05

标签: javascript amazon-web-services amazon-s3 aws-sdk amazon-cognito

我尝试整合AWS cognito用户池,但我觉得它不再安全了。因为登录时接收的id令牌包含用户池ID。使用该用户池ID,任何人都可以访问用户详细信息列表。

示例 - 下面显示了我的id_token数据,在那里我可以清楚地看到我的用户池ID在iss字段中(us-east-1_i1SXXXXX)

enter image description here

因此,使用该用户池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时做错了吗?

2 个答案:

答案 0 :(得分:1)

如果您拥有id的{​​{1}},则不能只是"请问" Cognito关于用户详细信息,因为:

用户池上的访问权限受AWS' IAM(由您/ admin给出),所以也许您没有身份验证 通过IAM在用户池上执行?!我非常怀疑。

显然,如果我的网页编写的Web应用程序可以访问用户池,那么我可以要求它做什么 想要用户池。

此外,您在用户池中的应用设置是什么?

答案 1 :(得分:0)

如果这个问题仍然存在,您是否碰巧在隐式获得Cognito管理员权限的计算机上执行代码?例如,如果它是在笔记本电脑上运行的,笔记本电脑是否具有包含.aws文件的credentials目录?如果它作为Lambda函数运行,是否向Lambda函数授予了具有Cognito管理员权限的角色?