AWS Cognito Correct User Flow - PullRequest
       4

AWS Cognito Correct User Flow

2 голосов
/ 03 марта 2020

Я пытаюсь перевести свою систему на основе PHP на AWS, но самая большая проблема, с которой я борюсь, это управление пользователями / аутентификация. Я сделал API-шлюзы и функции Lambda для получения данных из моего экземпляра RDS, и я могу использовать ключ API или ID-токен для аутентификации для защиты генерируемых ими данных. То, с чем я действительно борюсь, это Cognito. В моей голове система будет работать следующим образом?

  1. Пользователь заходит на мой сайт и нажимает кнопку входа.
  2. Пользователь перенаправляется на размещенный пользовательский интерфейс Cognito и входит в систему.
  3. Пользователь перенаправляется на выбранную страницу, а маркер идентификатора отображается в URL
  4. Я использую JavaScript для хранения токена ID в локальном хранилище (не уверен, что это правильный путь)
  5. Затем я могу извлечь токен ID и использовать его в SDK для запуска и аутентификации моих API

В PHP Я бы проверил, существует ли сеанс перед загрузкой страницы, чтобы предотвратить доступ пользователей, не вошедших в мою систему, если бы сеанс не существовал, они были бы перенаправлены на страницу входа. Как мне сделать это с Cognito / JWT, нужно ли проверять JWT с помощью лямбда-функции в верхней части каждой страницы HTML для моего сайта? По сути, я хочу, чтобы только пользователи, вошедшие через пул пользователей Cognito, имели доступ ко всем файлам HTML, js, CSS моей системы, кроме домашней страницы.

1 Ответ

2 голосов
/ 04 марта 2020

Похоже, у вас большая часть проработанного Cognito.

Если вы вызываете шлюз API из веб-клиента, вы, скорее всего, передаете этот токен jwt в заголовок, и эти вызовы API будут произойдет сбой до входа пользователя в систему.

Если вы используете клиентскую среду (React, Vue, et c), то, вероятно, у вас есть доступ к маршрутизатору, который отображает различные компоненты пользовательского интерфейса. Это работает аналогично тому, что вы делаете на сервере в php, и довольно легко заблокировать определенные маршруты или рендеринг определенных компонентов в зависимости от пользователя, вошедшего в систему. Выполнение этого без каркаса, вероятно, потребует значительного количества усилия.

Вы также можете установить сервер php, проверить токен jwt и сделать то, что вы обычно делаете для аутентифицированных пользователей.

Или вы можете использовать сверхсовременный, безсерверный подход , Вы можете разместить свой html / css в корзине S3 и поставить перед ним дистрибутив Cloudfront. Вы можете написать несколько Lambda@Edge функций для обеспечения прав доступа к содержимому в корзине S3.

Вероятно, если вы создаете приложение javascript на основе API, вам не нужно защищать свою разметку / css.

...