Некоторые заявления в отношении JWT в контексте аутентификации веб-клиент-сервер:Понимание JSON веб-Токен (JWT) в контексте веб-аутентификации
- JWT не являются безопасными против человека в середине атак. Отправка JWT от безопасности клиента к серверу по безопасности равна отправке хешированного пароля.
- JWT может нести данные пользователя как полезную нагрузку. Использование этих данных без доступа к фактическим данным в БД приводится как одна функция JWT. Однако данные JWT не будут отменять/обновлять данные, если данные БД меняются.
- В соответствии с 2. полезная нагрузка JWT в некоторых ситуациях должна быть проверена в отношении БД и/или временная метка должна быть установлена с умом, чтобы аннулировать JWT через некоторое время.
Пример реального мира, когда клиент должен выполнить несколько вызовов API, чтобы выполнить только один рабочий процесс: пользователь хочет узнать цену кратчайшего маршрута от A до B. Мы используем два типа JWT и «authJWT» & «обычный JWT».
- ЕСЛИ клиент имеет authJWT: клиент запрашивает API0 (API аутентификации) с authJWT. API0 проверяет подпись authJWT & Полезная нагрузка пользовательских данных от DB & timestamp < 2 дня. Возвращает новый «обычный» JWT.
ELSE: клиентские запросы API0 (auth API) с паролем & для JWT с меткой времени. API0 проверяет пароль & Вход в систему для БД и возвращает authJWT & «обычный» JWT.
В обоих случаях: все последующие API будут вызываться с «нормальным» JWT и проверять достоверность только через подпись и временную метку, но не против пользовательской БД. - Клиент запрашивает API1 дважды, чтобы получить наилучшее соответствие для строки поиска для места A и места B. Сервер проверяет подпись JWT & timestamp < 10s и использует пользовательские данные JWT, когда это необходимо.
- Клиент запрашивает API2 для получения кратчайшего маршрута из места A в место B. Сервер проверяет подпись JWT & timestamp < 10 секунд и использует пользовательские данные JWT, если необходимо.
- Клиент запрашивает API3, чтобы получить цену за короткий маршрут. Сервер проверяет подпись JWT & timestamp < 10s и использует пользовательские данные JWT, если необходимо.
Это означает, что мужчина в середине должен поймать вызов API0, чтобы получить реальный доступ. Захват «нормального» JWT имеет небольшой эффект, поскольку он истекает через 10 секунд. Вероятно, звонки в API 1-3 могут даже проходить через простой HTTP без SSL-шифрования, но это, конечно, зависит от вашего варианта использования. Во всех случаях пользовательские данные в JWT лучше шифруются отдельно.
Какие недостатки имеет этот дизайн? Что можно улучшить?
Я не знаю 'node.js' достаточно, чтобы рекомендовать библиотеку. В jwt.io у вас есть ссылки на библиотеки для всех языков. Проверьте раздел 'node.js' (только один – pedrofb
Я переписал свой вопрос, чтобы быть короче –