В приведенном ниже примере из amplify мы должны указать несколько битов конфигурации, чтобы разрешить клиенту Javascript подключаться к Cognito. Я предполагаю, что эти данные в открытом виде на клиенте могут быть в порядке.
Однако в некоторых статьях предполагается, что это не так, и я не нашел ничего ни на официальных сайтах AWS, ни на сайте amplify о том, что считается лучшей практикой в этом отношении.
Каков наилучший способ обработки этой конфигурации на клиенте при выполнении аутентификации только JS (т.е. без участия серверной части)?
import Amplify from 'aws-amplify';
Amplify.configure({
Auth: {
// REQUIRED - Amazon Cognito Identity Pool ID
identityPoolId: 'XX-XXXX-X:XXXXXXXX-XXXX-1234-abcd-1234567890ab',
// REQUIRED - Amazon Cognito Region
region: 'XX-XXXX-X',
// OPTIONAL - Amazon Cognito User Pool ID
userPoolId: 'XX-XXXX-X_abcd1234',
// OPTIONAL - Amazon Cognito Web Client ID
userPoolWebClientId: 'XX-XXXX-X_abcd1234',
}
});
Совершенно нормально иметь это в конфигурации на стороне клиента. На самом деле это необходимо.
В идентификаторах нет секретной информации, это просто ссылки. Это ничем не отличается от раскрытия ваших конечных точек API, это необходимо сделать.
Ваш клиент должен подключиться к вашему экземпляру Cognito. Вероятно, вы могли бы придумать какой-то сложный способ скрыть свойства, вытащив их из интернет-магазина во время выполнения, но ваш клиент все равно в конечном итоге выставит свойства. Кроме того, ваш пользователь не будет аутентифицирован в этот момент, поэтому вы даже не сможете защитить интернет-магазин.
Кроме того, ваши свойства на самом деле не изменяемы. Требуется только один раз раскрыть свойства (например, разработчик опубликует их или просто расскажет кому-то), и они будут безвозвратно потеряны. Попытка скрыть их — проигрышная игра.
Я предлагаю создать серверную службу просто для того, чтобы скрыть, что взаимодействие клиента с Cognito является антишаблоном.
AWS предоставляет ряд готовых функций безопасности, включая блокировку учетной записи при неправильном использовании пароля и блокировку вызовов с IP-адресов, которые совершают слишком много вызовов за короткий промежуток времени. Я считаю, что сервисы AWS также защищены от DDOS (см. CloudFront). Если кто-то завладеет вашим имуществом и попытается атаковать вас с помощью перебора учетных записей или DDOS, ему будет трудно добиться чего-либо.
Хотя третья сторона теоретически может использовать пул пользователей вашего приложения для хранения пользователей этого стороннего приложения, есть ли способы предотвратить это?