Вы знаете, что неправильно понимаете JSON Web Token?

Spring Boot Java

1. Введение

JSON Web Token (JWT)На самом деле он уже широко известен разработчикам программного обеспечения, ноJOSE (Javascript Object Signing and Encryption)Но мало кто знает, первый раз я знаю, что это вSpring Securityв официальной документации он изменил мойJWTнекоторые знания. В настоящее время в Китае не так много соответствующих китайских материалов. Поэтому считаю необходимым подвести итог.

2. Обзор ХОСЕ

JOSEНабор спецификаций, предназначенных для предоставления средств безопасной передачи требований между сторонами. наш обычныйJWTОн содержит объявления, которые позволяют клиентам получать доступ к определенным ресурсам в определенном приложении.JOSEДля этого был разработан ряд спецификаций. В настоящее время спецификация все еще находится в стадии непрерывной разработки, и наши наиболее часто используемые включают в себя следующиеRFC :

  • JWS (RFC 7515)- Веб-подпись JSON, описывающая создание и обработку подписанных сообщений.
  • JWE (RFC 7516)- Веб-шифрование JSON, описывающее защиту и обработку зашифрованных сообщений.
  • JWK (RFC 7517)- Веб-ключ JSON, описаниеJavascriptФормат и обработка ключей шифрования при подписывании и шифровании объектов
  • JWA (RFC 7518)- Веб-алгоритм JSON, описывающийJavascriptАлгоритм шифрования, используемый при подписании и шифровании объектов
  • JWT (RFC 7519)- Веб-токен JSON с описанием, начинающимся сJSONзакодировано иJWSилиJWEПредставление декларации об охране

3. Мы все ошибаемся в JWT

смотреть прямоJWTВ описании упоминается, что «токен начинается сJWSилиJWEВ заявлении говорилось: «Возможно ли, что мое предыдущее понимание было неверным? После изучения некоторой официальной информации, это правда, что мое предыдущее понимание было недостаточно полным.

Официальное определение:

JSON Web Token (JWT) is a compact URL-safe means of representing claims to be transferred between two parties

В буквальном переводе: веб-токены JSON (JWT) — это компактный, безопасный для URL-адресов метод представления требований, которые должны быть переданы между двумя сторонами.

То есть мы обычно говоримJWTна самом деле заявлениеJOSEОбщее название метода обработки. То, что мы использовали раньше, должно называтьсяJWS(JSON Web Signature),ДаJWTреализация , за исключениемJWS , JWTЕсть другая реализацияJWE(JSON Web Encryption). Отношения между ними должны быть такими:

4. Что такое JWE

JWSМы не будем этого говорить, это то, что мы обычно говоримJWT. в том числе до того, как я был вПрактичная галантерея Spring Securityучаствует вJWTобаJWS. Давайте поговоримJWE.JWSПодписываются только претензии, чтобы гарантировать, что они не были подделаны, но ихполезная нагрузка (полезная нагрузка среднего сегмента)Информация раскрывается. этоJWSОн может только гарантировать целостность данных и не может гарантировать, что данные не будут утеряны. Поэтому я уже говорил, что он не подходит для передачи конфиденциальных данных.JWEпоявилось решение этой проблемы. В частности, вы можете увидеть следующий рисунок:

Как видно из вышеизложенногоJWEГенерация токена очень громоздка и может потреблять ресурсы и время в качестве токена. Должно быть хорошо использовать в качестве безопасного маршрута передачи данных.

5. Spring Security, связанный с jose

Здесь мы должны кратко упомянуть, что Spring Security предоставляет библиотеки классов, связанные с JOSE.spring-security-oauth2-jose, вы можете использовать эту библиотеку классов для использованияJOSE. еслиJavaразработчиковSpring Securityиспользуется в системе безопасностиOAuth2.0, эту библиотеку классов тоже нужно изучать.

6. Резюме

Сегодня мыJOSEЭта относительно незнакомая концепция была признана, и несколько важныхRFCперечислено. Предыдущее понимание ограничений также было исправлено. для нашего продолженияOAuth2.0Соответствующее обучение было проложено.

关注公众号:Felordcn获取更多资讯

Личный блог: https://felord.cn