Давайте посмотрим на лес сначала, прежде чем смотреть на деревья.
Здесь есть много информативных ответов с большими подробностями, я не буду повторять ни одного из них. Ключ к программированию в JavaScript имеет сначала правильную ментальную модель общего исполнения.
Хорошие новости заключается в том, что, если вы хорошо понимаете этот момент, вам никогда не придется беспокоиться о гоночных условиях. Прежде всего вы должны понимать, как вы хотите упорядочить свой код как по существу ответ на разные дискретные события, и как вы хотите объединить их в логическую последовательность. Вы можете использовать обещания или новые асинхронные / ожидающие более высокие уровни в качестве инструментов для этой цели, или вы можете откатывать свои собственные.
Но вы не должны использовать какие-либо тактические инструменты для решения проблемы, пока вам не понравится актуальная проблемная область. Нарисуйте карту этих зависимостей, чтобы знать, что нужно запускать, когда. Попытка ad-hoc подхода ко всем этим обратным вызовам просто не поможет вам.
Вы можете перейти к jwt.io
, вставить маркер и прочитать содержимое. Это изредка для многих людей изначально.
Короткий ответ: JWT не относится к шифрованию. Он заботится о валидации. То есть, он всегда может получить ответ для «Использовать содержимое этого токена»? Это означает, что манипулирование пользователем токена JWT бесполезно, потому что сервер будет знать и игнорировать токен. Сервер добавляет подпись на основе полезной нагрузки при выдаче токена клиенту. Позже он проверяет полезную нагрузку и сопоставимую подпись.
Логическим вопросом является то, что является мотивацией не к самому себе с зашифрованным содержимым?
secure + httpsOnly
(не может быть прочитан Javascript +, не может быть прочитан HTTP) и разговаривает с сервером по зашифрованный канал (HTTPS). Как только вы узнаете, что у вас есть безопасный канал между сервером и клиентом, вы можете безопасно обменивать JWT или что-то еще, что вы хотите. Это не слишком отличается от того, как работают файлы cookie. Файлы cookie часто содержат незашифрованные данные. Если вы используете HTTPS, тогда все будет хорошо. Если вы этого не сделаете, рекомендуется зашифровать сами файлы cookie. Не делать этого будет означать, что возможна атака «человек в середине» - прокси-сервер или интернет-провайдер читает файлы cookie, а затем повторяет их позже, притворяясь вами. По аналогичным причинам JWT следует всегда обменивать на безопасном уровне, таком как HTTPS.
Содержимое в токенах json web (JWT) не является неотъемлемо безопасным, но есть встроенная функция проверки подлинности токена. JWT - три хэша, разделенные периодами. Третья - подпись. В системе открытого / закрытого ключа эмитент подписывает подпись токена с помощью закрытого ключа, который может быть проверен только с помощью соответствующего открытого ключа.
Важно понимать различие между эмитентом и верификатором. Получатель токена отвечает за его проверку.
В безопасном использовании JWT в веб-приложении есть два важных шага: 1) отправить их по зашифрованному каналу и 2) проверить подпись сразу после получения Это. Асимметричный характер криптографии с открытым ключом делает проверку подписи JWT возможной. Открытый ключ проверяет, что JWT был подписан его соответствующим личным ключом. Никакая другая комбинация клавиш не может выполнять эту проверку, тем самым предотвращая попытки олицетворения. Следуйте этим двум шагам, и мы с математической гарантией можем гарантировать подлинность JWT.
More reading: Как открытый ключ проверяет подпись?
Данные внутри JWT подписаны и зашифрованы, это не значит, что они безопасны. JWT не обеспечивает гарантии для конфиденциальных данных.
данные шифруются с использованием закрытого ключа, который известен обеим сторонам, то есть отправителю и получателю, злоумышленник может заблокировать ключ и может изменить содержимое.
Насколько мне известно, JWT не обеспечивает безопасность.
Спасибо
Только закрытый ключ JWT, который находится на вашем сервере, расшифрует зашифрованный JWT. Те, кто знает privateKey, смогут расшифровать зашифрованный JWT.
Скрыть privateKey в безопасном месте на вашем сервере и никому не сообщать privateKey.