Использование экспресс-сессии и JWT

У меня есть куча вопросов об экспресс-сессиях и JWT в проекте, который я создаю.

У меня есть сервер Express API, который я хочу защитить с помощью какого-то ключа API, чтобы только авторизованные приложения могли получить доступ к моим данным. JWT, вероятно, справится со своей задачей. Однако мне также нужно аутентифицировать пользователей и ограничивать их доступ к определенным частям данных (например, разрешениям на основе ролей) с помощью экспресс-сеанса.

Внешним сервером будет экземпляр Next.js, который будет сохранять и использовать файлы cookie для экспресс-сеанса. Сеанс будет храниться в экземпляре MongoDB.

Смогу ли я использовать оба метода аутентификации в одном проекте? Будет ли это безопасно? Есть ли более простой подход к этому? Как я могу реализовать разрешения?

Любая помощь и советы будут оценены.

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

Maielo 13.12.2018 10:14

Авторизация должна выполняться отдельно - создание авторизации пользователя для создания в базе данных (зависит от вас, как вы собираетесь это делать, например, «admin», «user» или с использованием целых чисел, таких как 1 = admin 0 = guest). и, как я уже сказал, прежде чем сохранять эту ссылку в токен при входе в систему, затем проверять каждый запрос на бэкэнде для user.authorization и делать все, что вы хотите ... отправлять разные данные, например

Maielo 13.12.2018 10:15

@Maielo Значит, используя исключительно JWT, я могу обрабатывать аутентификацию пользователя и аутентификацию приложения? Будет ли это работать с кросс-домиановыми запросами? Мои серверы api и frontend размещаются отдельно, так что это одна из моих проблем.

Alejandro Otero Gómez 13.12.2018 12:26

да JWT - это в основном строка JSON с подписанным хешированием данных. Неважно, куда вы его отправите. Рекомендуем использовать в запросе заголовок Authorization: Bearer <token>

Maielo 13.12.2018 15:11
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
6
4
6 867
1

Ответы 1

JWT и Express-Session выполняют одно и то же. Разница в том, что браузер не разрешает доступ только к http-куки через javascript. В конце они оба используются с одной и той же целью.

Jwt должен быть связан с сеансом пользователя, поэтому права пользователей имеют значение. Они могут быть реализованы в БД и связаны с пользователем. Имеет ли он это разрешение или его роль имеет это разрешение - это промежуточное программное обеспечение, которое вы должны разместить на маршрутах.

В случае с экспресс-сессией я бы лично применил тот же подход.

Другие вопросы по теме