JWS (то есть подписанный JWT ) использует криптографическую подпись для обеспечения целостности утверждений, поэтому многие разработчики приложений склонны использовать аутентификация без сохранения состояния : если подпись действительна, а токен не просрочен, токену можно доверять, независимо от состояния, хранящегося на сервере.
Это здорово имощный подход, но он имеет компромисс : он не дает вам большого контроля, когда вам нужно управлять отзывом токена.Так что это не подход «один размер подходит для всех» : он может хорошо работать в некоторых контекстах (например, распространение идентификаторов микросервисов), но может не подходить для всех приложений.
Если вам нужна возможность отзывать токены, то это сопряжено с определенными затратами: вам нужно отслеживать их где-нибудь на вашем сервере, либо в белом списке , либо в черном списке .
Чтобы достичь этого, вы можете назначить уникальный идентификатор каждому токену, а затем сохранить такой идентификатор на своем сервере.При проверке токена, помимо проверки подписи и даты истечения срока действия, вы также должны проверить, находится ли идентификатор токена в белом списке (или не в черном списке).
Наконец, утверждение jti
предназначен для хранения уникального идентификатора в токене:
4.1.7.Заявка "jti" (идентификатор JWT)
Заявка jti
(идентификатор JWT) предоставляет уникальный идентификатор для JWT.Значение идентификатора ДОЛЖНО быть назначено таким образом, чтобы обеспечить незначительную вероятность того, что одно и то же значение будет случайно назначено другому объекту данных;если приложение использует несколько эмитентов, коллизии ДОЛЖНЫ быть предотвращены среди значений, созданных разными эмитентами.Заявка jti
может использоваться для предотвращения воспроизведения JWT.Значение jti
является регистрозависимой строкой.Использование этого требования НЕОБЯЗАТЕЛЬНО.