Как проверить 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).