Как проверить JWT вне сервера авторизации

Недавно я пытаюсь реализовать сервер OAuth2.0, используя JSON Web Token (JWT) в качестве токена доступа. Я очень озадачен автономной функцией JWT. Я заметил, что JWT может быть проверен где угодно, а не обязательно на сервере авторизации, потому что он автономен. Как работает эта функция? Какие требования должны быть включены в JWT, чтобы реализовать автономную функцию?

Другой вопрос заключается в том, что если JWT не имеет состояния, это означает, что сервер не должен хранить JWT. Тогда как проверяется JWT? Разве это не легко подделать?

Я новичок в этой области, я хотел бы, чтобы кто-то мог помочь мне:)

1 ответ

Решение

JWT содержит заявления, которые могут быть подписаны, зашифрованы или оба. Эти операции выполняются с использованием криптографических ключей. Ключи могут быть симметричными (например, octключи et) являются асимметричными (например, пары личного / открытого ключа, такие как RSA или же EC ключи).

Если вы хотите проверить JWT (то есть JWS), вы должны выполнить следующие шаги:

  • Проверьте заголовок (алгоритм поддерживается, критические утверждения находятся в полезной нагрузке и их значение понятно).
  • Проверьте претензии (особенно exp, iat, nbf, aud).
  • Проверьте подпись.

Для проверки подписи нужен ключ и, в зависимости от алгоритма, этот ключ может быть

  • Симметричный ключ
  • Открытый ключ, если асимметричный

Если вы хотите разрешить сторонним приложениям проверять ваш JWT, вы будете использовать асимметричные ключи и передавать открытый ключ третьим лицам. Поскольку открытые ключи не могут быть использованы для подписи, третьи стороны не могут подделать действительный токен с пользовательскими утверждениями.

То, как вы делитесь ключами, зависит от вас. Распространенным способом является предоставление URL-адреса, по которому приложения будут получать их (например, ключи Google по адресу https://www.googleapis.com/oauth2/v3/certs).

Другие вопросы по тегам