🤔JWT. Часть 2 — Что находится внутри токена В первой части мы разобрали, зачем вообще нужен JWT. Теперь посмотрим внутрь. JWT состоит из трёх частей: HEADER.PAYLOAD.SIGNATURE Примерно так: xxxxx.yyyyy.zzzzz Каждая часть отвечает за свою задачу. 1. HEADER Header — это заголовок токена. Он может выглядеть так: { "alg": "RS256", "typ": "JWT" } Здесь: alg — алгоритм, которым подписан токен. Например: HS256 RS256 ES256 typ — тип токена: JWT То есть Header примерно говорит: Я JWT-токен, и для моей подписи используется такой-то алгоритм. 2. PAYLOAD Payload — это данные внутри токена. Например: { "sub": "42", "role": "USER", "iat": 1788814800, "exp": 1788815700 } Поля внутри JWT обычно называют claims. Claim — это некоторое утверждение. Например: sub = 42 означает: этот токен относится к пользователю 42. Разберём самые частые claims. sub — Subject. Обычно идентификатор пользователя: { "sub": "42" } iat — Issued At. Когда токен был создан. exp — Expiration Time. Когда токен перестанет действовать. iss — Issuer. Кто выпустил токен. Например: { "iss": "auth-service" } aud — Audience. Для какого сервиса или API предназначен токен. Например: { "aud": "orders-api" } В итоге Payload может выглядеть так: { "sub": "42", "role": "CUSTOMER", "iss": "auth-service", "aud": "orders-api", "iat": 1788814800, "exp": 1788815700 } И вот здесь очень важный момент. Payload обычного JWT не зашифрован. Он кодируется через Base64URL. А Base64URL — это не шифрование. То есть пользователь может взять JWT и посмотреть его содержимое. Поэтому внутри токена нельзя хранить: пароли секретные ключи данные банковских карт любую информацию, которую пользователь не должен видеть JWT правильнее воспринимать так: Содержимое токена обычно можно прочитать, но нельзя незаметно изменить. И тут возникает главный вопрос. Допустим внутри JWT написано: { "role": "USER" } Что мешает пользователю изменить это на: { "role": "ADMIN" } Ведь Payload он может прочитать и перекодировать обратно. Ответ находится в третьей части JWT: SIGNATURE Именно подпись позволяет серверу понять, что данные внутри токена кто-то изменил. В следующей части разберём, как работает подпись JWT и почему просто заменить USER на ADMIN не получится.