Это довольно широкий вопрос (я нахожусь на грани того, слишком ли он широк для переполнения стека). Но вот что:
Защита ваших (частных) ресурсов потребует от вашего веб-сайта аутентификации (authN) и, возможно, авторизации (authZ). Ознакомьтесь с этим объяснением этих понятий :
Проще говоря, аутентификация - это процесс проверки того, кем является пользователь, а авторизация - это процесс проверки того, к чему у него есть доступ. .
Я говорю, что вам может понадобиться authZ, поскольку в случае, когда всем пользователям разрешено делать все, вы можете выполнить оба действия на этапе authN.
Самым распространенным способом достижения этого с помощью Amplify является использование Cognito . Cognito состоит из двух основных частей:
Пользовательские пулы Cognito : обрабатывать аутентификацию. Они являются хранилищем пользовательских идентификаторов, и Amplify использует их для получения токенов аутентификации . Они могут передать свою настоящую работу по аутентификации стороннему провайдеру идентификации , например, Google или Facebook.
Cognito Identity Pools : обрабатывать authZ. Они представляют собой сопоставление идентификаторов пользователей (связанных в пул пользователей) с учетными данными IAM .
Пулы Cognito ID не нужны , если используется API Шлюз , который может предоставлять authZ напрямую из токенов аутентификации.
Основная уязвимость заключается в том, что моя конфигурация Amplify представлена в Angular коде
Это фундаментальная часть веб-разработки. Ваш клиент должен всегда знать, какие конечные точки использовать для аутентификации и авторизации. Хитрость в том, что конечные точки полезны, только если у пользователя есть учетные данные для аутентификации. Это точно поведение каждой страницы входа в сеть: любой может попробовать , чтобы войти на любую страницу входа publi c. Но если у вас нет учетных данных, конечная точка отказывается аутентифицировать вас.
С точки зрения другой конфигурации, если вы действительно хотите, вы можете подождать, пока после authN / authZ появится предоставить клиенту информацию о том, где найти его ресурсы, такие как «Динамо». Но это вполне может быть излишним; Вы должны тщательно взвесить, насколько вы параноидальны, чтобы определить, стоит ли скрывать идентичность внутренних ресурсов, к которым неавторизованные пользователи не смогут получить доступ.
Редактировать в ответ на комментарии:
Не может ли разработчик создать учетную запись через мое приложение, использовать мою конфигурацию Amplify в своем собственном приложении, пройти аутентификацию с учетной записью, созданной через мое приложение, а затем иметь свободный доступ к моим ресурсам Amplify, если они аутентифицированы?
Да! Более простой способ сделать это - выполнить аутентификацию в вашем приложении, получить полученные учетные данные и использовать их напрямую через консоль для ручного выполнения операций. Но опять же, это фундаментальное ограничение взаимодействия клиент-сервер: все, что вы предоставляете клиенту (включая учетные данные), может использоваться любым способом, который хочет клиент, потому что вы не можете контролировать интерфейс конец . Чтобы обойти это, нужно ограничить права, которые вы предоставляете пользователю на серверной стороне : путем строгого ограничения операций, учетные данные которых разрешают пользователю выполнять.
Другой способ думать об этом в том, что даже если вы можете запретить пользователю использовать учетные данные за пределами вашей указанной c передней страницы, он может написать скрипту боту, чтобы он вручную нажимал кнопки или вводил мусор. Поскольку вы не можете контролировать, какие действия будет предпринимать пользователь, единственное, что вы можете сделать, - это убедиться, что он преуспевает только в том, что вы хотите, с помощью соответствующих разрешений.