Подпись - это просто хэширование с использованием секретного ключа, сгенерированного сервером аутентификации , с использованием алгоритма, указанного в заголовке, комбинации вашего заголовка, полезной нагрузки и секрета
Только секретный сервер и / или сервер приложений знает этот секрет. JWT кодируется и подписывается, но не шифруется. Чтобы понять разницу между знаком / хэшем и шифрованием, отметьте this
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
Подпись просто проверяет или проверяет, было ли сообщение уже хэшировано, прежде чем использовать тот же тип алгоритма, который указан в заголовке с секретом, известным только серверу.
Чтобы понять, как это работает в аутентификации, вот поток:
- Пользователь вошел в систему, вы отправили пользователя / пароль на сервер в зашифрованном виде через https
- Сервер проверяет имя пользователя / пароль от вашей базы данных
- Сервер генерирует JWT и отправляет его обратно вам. Подпись используется здесь для проверки того, что сообщение не было изменено.
- Сервер сохраняет JWT где-то в хранилище сеансов.
- Позже пользователь запрашивает сервер (отправляет JWT каждый раз, когда ему что-то нужно с сервера)
- Сервер проверяет его, используя тот же тип алгоритма хеширования, который находится в заголовке, и в нем хранится секрет.
- Сервер проверяет, находится ли он уже в хранилище сеансов.
- Серверы авторизуют и предоставляют вам запрос.
Я бы рекомендовал вам прочитать эту статью , которая более наглядна, чтобы лучше понять, как она работает.