# Что такое jwt токен и как он работает?

**JWT (JSON Web Token)** — это компактный и безопасный способ передачи информации между клиентом и сервером в виде JSON-объекта. Обычно используется для аутентификации и авторизации.

***

### 1️⃣ Структура JWT

JWT состоит из **трёх частей**, разделённых точками:

```
<Header>.<Payload>.<Signature>
```

1. **Header (заголовок)**

   * Указывает алгоритм подписи и тип токена.

   ```json
   {
     "alg": "HS256",
     "typ": "JWT"
   }
   ```
2. **Payload (полезная нагрузка)**

   * Содержит данные пользователя или другие claims (например, user\_id, роль, срок действия).

   ```json
   {
     "sub": "1234567890",
     "name": "John Doe",
     "role": "admin",
     "exp": 1715199300
   }
   ```
3. **Signature (подпись)**
   * Создаётся с помощью секретного ключа и header + payload.
   * Проверяет, что токен не был изменён.

***

### 2️⃣ Принцип работы

1. Пользователь логинится → сервер проверяет логин и пароль.
2. Сервер создаёт JWT и отправляет клиенту.
3. Клиент сохраняет токен (например, в localStorage или cookie).
4. Для запросов к API клиент отправляет токен в заголовке:

```
Authorization: Bearer <jwt_token>
```

5. Сервер проверяет подпись и срок действия (`exp`).
6. Если токен валиден → запрос выполняется; иначе → 401 Unauthorized.

***

### 3️⃣ Преимущества

* **Stateless**: сервер не хранит сессию, все данные в токене.
* **Мобильность**: токен можно использовать между сервисами.
* **Защита от подделки**: подпись проверяет целостность данных.

***

### 4️⃣ Недостатки

* Нельзя легко отозвать токен до истечения срока действия.
* Хранение в localStorage уязвимо к XSS, в cookie — к CSRF (если не использовать HttpOnly).

***

### 5️⃣ QA-проверки

* Корректность создания токена и срок действия.
* Доступ к защищённым эндпоинтам с валидным и просроченным токеном.
* Проверка невозможности подмены данных или подписи.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://kaze.gitbook.io/qa-theory/web/chto-takoe-jwt-token-i-kak-on-rabotaet.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
