Anunay привел довольно хорошую аналогию того, как JWT работают на высоком уровне в качестве переносимого, надежного идентификатора, но поскольку OAuth поддерживает больше, чем просто аутентификацию JWT, он может потребовать обмена чуть более подробной информацией.
Самоанализ токена
В своем вопросе вы справедливо предположили, что токенам нужен какой-то способ доверия, и что одним из таких способов было бы сохранить токен в частной базе данных и выполнять поиск при каждом представлении токена для определения его действительности. Вы абсолютно точно сможете оборудовать действительный сервер OAuth, используя такой метод, выполнив токен, используя любую форму, которую вы наберете sh, и напишите конечную точку introspection , которая выполняет поиск. OAuth spe c является преднамеренно абстрактным, поэтому функциональное поведение интроспекции токенов может принимать различные формы.
Одна из причин такого уровня абстракции заключается в том, что при сохранении токенов для прямого поиска может быть easy , это означает, что вы должны хранить копии этих токенов в какой-либо форме в частной базе данных для сравнения. Это хранилище, в свою очередь, сделает вас приманкой для плохих актеров, как внутренних, так и внешних, которые будут стремиться выдавать себя за ваших пользователей в массовом порядке. Именно по этой причине многие реализации OAuth предпочитают выдавать и проверять токены, используя шифрование с открытым / закрытым ключом вместо прямого поиска. Этот процесс очень похож на тот, который Аннуай описал в своем комментарии, так как он выдает токены, которые подписаны закрытым ключом и проверены публичным c. Благодаря этому процессу вам больше не нужно хранить все токены в частной базе данных, а вместо этого просто нужно защитить закрытые и публичные ключи c, которые используются для подписи и проверки токенов соответственно.
JSON Веб-токены (JWT) и сокращение количества вызовов самоанализа
Ответ Аннуэя специально относится к общей структуре токенов, которая генерируется с использованием шифрования с открытым / закрытым ключом и выдается пользователям JSON Веб-токены. Эти токены структурированы таким образом, что они включают пользовательскую информацию, которая может понадобиться бэкэнд-службе, такую как идентификатор пользователя, адрес электронной почты и иногда больше, в необработанном формате, который непосредственно читается бэкэнд-API. В дополнение к этой необработанной информации, JWT включают в себя дубликат копии данных, но этот дубликат копируется с помощью закрытого ключа. Чтобы доверять токену JWT, все, что вам нужно сделать, - это использовать ключ publi c и убедиться, что кодированная полезная нагрузка с закрытым ключом проверяется путем применения ключа publi c к необработанной полезной нагрузке. Поскольку ключи publi c редко меняются, многие серверные службы кэшируют ключи, используемые для проверки, и предпочитают не выполнять самоконтроль токена на сервере-эмитенте, поскольку они уже могут проверить полезную нагрузку. Таким образом вы оптимизируете пропускную способность для внутренних служб, защищенных с помощью OAuth.
Поскольку ключи publi c могут использоваться только для проверки полезных нагрузок, а не для их создания, эти ключи publi c часто передаются в широковещательном режиме. серверами, которые выпустили токены, позволяющие кому-либо «доверять» токенам, которые он выпускает, если они того пожелают. Чтобы узнать больше об этом процессе, я бы порекомендовал вам изучить OpenID Connect .