Насколько безопасен AWS Cognito?
Я пытался интегрировать пул пользователей AWS cognito, однако я чувствую, что он больше не защищен. Потому что идентификатор, который получает токен при входе в систему, содержит идентификатор пула пользователей. Используя этот идентификатор пула пользователей, любой может получить доступ к детальному списку пользователей.
Пример - ниже показаны мои данные id_token, и там я ясно вижу свой идентификатор пула пользователей в поле iss (us-east-1_i1SXXXXX)
Таким образом, используя этот идентификатор пула пользователей, я могу получить список пользователей, а затем редактировать любые пользовательские данные.
Получить информацию о пользователе -
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?
1 ответ
Если у вас есть id
из userpool
Вы не можете просто "спросить" Cognito о деталях пользователя, потому что:
Доступ к пользовательским пулам регулируется IAM AWS (предоставленным вами / администратором), поэтому, возможно, у вас нет принудительной аутентификации для пула пользователей через IAM?! Я очень сомневаюсь в этом.
Очевидно, что если мое веб-приложение, написанное в сети, имеет доступ к пулу пользователей, я могу попросить сделать то, что оно хочет, с пулом пользователей.
Кроме того, каковы настройки вашего приложения в пуле пользователей?
Если этот вопрос все еще актуален, вы случайно не выполняли код на машине, которая неявно получает права администратора Cognito? Например, если он был запущен на вашем ноутбуке, был ли у вашего ноутбука.aws
каталог, содержащий credentials
файл? Если она была запущена как функция Lambda, была ли функция Lambda предоставлена роль с правами администратора Cognito?