У меня есть куча вопросов об экспресс-сессиях и JWT в проекте, который я создаю.
У меня есть сервер Express API, который я хочу защитить с помощью какого-то ключа API, чтобы только авторизованные приложения могли получить доступ к моим данным. JWT, вероятно, справится со своей задачей. Однако мне также нужно аутентифицировать пользователей и ограничивать их доступ к определенным частям данных (например, разрешениям на основе ролей) с помощью экспресс-сеанса.
Внешним сервером будет экземпляр Next.js, который будет сохранять и использовать файлы cookie для экспресс-сеанса. Сеанс будет храниться в экземпляре MongoDB.
Смогу ли я использовать оба метода аутентификации в одном проекте? Будет ли это безопасно? Есть ли более простой подход к этому? Как я могу реализовать разрешения?
Любая помощь и советы будут оценены.
Авторизация должна выполняться отдельно - создание авторизации пользователя для создания в базе данных (зависит от вас, как вы собираетесь это делать, например, «admin», «user» или с использованием целых чисел, таких как 1 = admin 0 = guest). и, как я уже сказал, прежде чем сохранять эту ссылку в токен при входе в систему, затем проверять каждый запрос на бэкэнде для user.authorization и делать все, что вы хотите ... отправлять разные данные, например
@Maielo Значит, используя исключительно JWT, я могу обрабатывать аутентификацию пользователя и аутентификацию приложения? Будет ли это работать с кросс-домиановыми запросами? Мои серверы api и frontend размещаются отдельно, так что это одна из моих проблем.
да JWT - это в основном строка JSON с подписанным хешированием данных. Неважно, куда вы его отправите. Рекомендуем использовать в запросе заголовок Authorization: Bearer <token>





JWT и Express-Session выполняют одно и то же. Разница в том, что браузер не разрешает доступ только к http-куки через javascript. В конце они оба используются с одной и той же целью.
Jwt должен быть связан с сеансом пользователя, поэтому права пользователей имеют значение. Они могут быть реализованы в БД и связаны с пользователем. Имеет ли он это разрешение или его роль имеет это разрешение - это промежуточное программное обеспечение, которое вы должны разместить на маршрутах.
В случае с экспресс-сессией я бы лично применил тот же подход.
Прежде всего, JWT может хранить данные сеанса, вы можете сохранить их в cookie или использовать
localStorageили любое хранилище на стороне клиента для получения данных. Сессии ни в коем случае не должны храниться в БД, поскольку ее необходимо обновлять из соображений безопасности. Вы можете сохранить авторизацию JWT, которая должна быть добавлена в токен при входе в систему, также сохраните в токене идентификатор пользователя и любую другую информацию, которая вам нужна, например, адрес электронной почты пользователя и т. д., НО НЕ ПАРОЛЬ.