javascript - AWS Cognito 的安全性如何?

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

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

示例 - 下面显示了我的 id_token 数据,我可以在 iss 字段中清楚地看到我的用户池 ID (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 时做错了什么吗?

最佳答案

如果您拥有用户池id,您不能只“询问”Cognito 用户详细信息,因为:

用户池的访问由 AWS 的 IAM(由您/管理员提供)管理,因此您可能没有身份验证 通过 IAM 对用户池执行?!我非常怀疑。

显然,如果我的网络编写的网络应用程序可以访问用户池,那么我可以要求执行它的操作 想要处理用户池。

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

关于javascript - AWS Cognito 的安全性如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48718381/

相关文章:

javascript - Javascript 可以通过编程方式模拟 "keyup"吗?

javascript - 使用 C# 将 JSON 代码导入 Javascript 文件

amazon-web-services - API 网关 - 使用区域和自定义域名时证书链无效

hadoop - Hdfs 到 s3 Distcp - 访问 key

python - 如何检查我上传的文件是否为 "multipart"?

javascript - S3 使用流时上传损坏的文件

javascript - Javascript 事件处理中的问题

javascript - 在 ng-repeat 上动态查找最小值

amazon-web-services - AWS API GATEWAY - 空响应正文

symfony - Amazon ElasticBeanstalk 中的单实例 cronjob