Авторизация для каждой функции (AWS + Angular + Serverless) - PullRequest
0 голосов
/ 28 марта 2020

Я разрабатываю приложение, используя Angular + Без сервера (AWS).

Я новичок ie в AWS, и я пытаюсь понять, как реализовать аутентификацию и авторизация. Я понял, что AWS имеет Cognito User Pool (пользовательский каталог) и Cognito Identity Provider (для аутентификации), но я не знаю, как настроить их для моего варианта использования.

Я хотел бы реализовать детальный механизм авторизации. В этом механизме авторизации у меня будут права доступа, каждое для каждой функции (например, показать пользователей, добавить пользователя, обновить пользователя, удалить пользователя и т. Д. c.) И роли (например, бесплатные, премиум, администратор и т. Д. c.) которые содержат коллекцию разрешений.

Каждый пользователь должен быть назначен на роль и получает разрешения для этой роли. В приложении Angular мне бы хотелось, чтобы эти разрешения включали или не включали соответствующую функцию (например, если у пользователя есть разрешение на добавление пользователя, покажите кнопку добавления).

Таким образом, я может динамически изменять разрешения роли, и это автоматически отражает то, что пользователь может делать без каких-либо изменений в приложении Angular.

Я привык реализовывать это в Spring Security, где каждая функция является ролью. (например, ROLE_ADD_USER), и они сгруппированы в группы ролей (например, GROUP_ADMIN). Таким образом, пользователь назначается в группу ролей, и во время входа в систему я возвращаю, в дополнение к токену доступа, все роли (разрешения) пользователя.

Может кто-нибудь помочь мне понять, как реализовать это с помощью AWS Cognito и IAM?

1 Ответ

0 голосов
/ 28 марта 2020

Авторизация должна быть реализована на стороне сервера.

Ваше бессерверное приложение должно будет проверять для каждого запроса, авторизован пользователь или нет. Любые функции авторизации в вашем приложении angular обеспечивают " безопасность через неизвестность ". Когда ваше приложение angular подключается к вашей серверной серверной части, оно делает это через запрос http. Теоретически относительно тривиально захватить такой запрос и изменить его. Ничто из того, что вы делаете в приложении Angular, не защитит вас от этого, поэтому вам нужно проверять каждый отдельный запрос.

Единственная функциональность, которую вы должны реализовать в своем приложении angular, - это отображение или скрытие элементов пользовательского интерфейса. в зависимости от группы пользователей и разрешений. Имейте в виду, что это только для того, чтобы сделать приложение более доступным и не повышает безопасность; любой может легко изменить код приложения в своем браузере, чтобы отображать элементы пользовательского интерфейса, которые должны быть скрыты.

Убедитесь, что ваш сервер защищен и все запросы авторизованы в бэкэнде.

Подробнее о возможностях защиты вашего безсерверного приложения можно узнать здесь: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-controlling-access-to-apis.html

...