Jwt: Руководство разработчика

При разработке и поддержке проектов на платформе 1С-Битрикс критически важно использовать современные стандарты D7 API. В этом руководстве мы детально изучим тему «Jwt: Руководство разработчика», разберем архитектурные особенности и предоставим готовые к интеграции примеры кода.

—
title: JWT
—

JWT (JSON Web Token) — стандарт для передачи данных между клиентом и сервером в формате JSON. Токен состоит из трех частей:

  • заголовок header — указывает алгоритм подписи,
  • данные payload — передает информацию,
  • подпись signature — защищает токен от подделки.

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

Варианты использования

  • Авторизация без сессий. Пользователь остается авторизованным, пока токен действителен.
  • Защищенные запросы к API. Сервер проверяет подпись токена.
  • Обмен данными между сервисами. Например, обмен между сайтом и мобильным приложением.

Создать токен

Чтобы создать JWT-токен, используйте класс Bitrix\Main\Web\JWT.

use Bitrix\Main\Web\JWT;

$secret = 'ваш-секретный-ключ'; // Храните его в безопасности
$payload = [
    'user_id' => 123,          // ID пользователя
    'name' => 'Иван',          // Дополнительные данные
];

$jwt = JWT::encode($payload, $secret); // Метод encode создает токен с алгоритмом HS256 по умолчанию

// Или с другим алгоритмом, например RS256
// $jwt = JWT::encode($payload, $privateKey, 'RS256');
  • Ключ $secret должен быть длинным и содержать случайные символы.
  • В payload можно передавать любые данные.
  • По умолчанию используется алгоритм HS256.

Ограничить время действия токена

Чтобы ограничить время действия токена, добавьте в payload параметры:

  • iat — время создания,
  • exp — срок действия,
  • nbf — время начала работы.
use Bitrix\Main\Web\JWT;

$secret = 'секретный-ключ';
$payload = [
    'user_id' => 123,
    'name' => 'Иван',
    'iat' => time(),            // Токен создастся сейчас
    'exp' => time() + 3600,     // Истечет через 1 час
    'nbf' => time() + 300,      // Станет активен через 5 минут
];

$jwt = JWT::encode($payload, $secret);

Учесть рассинхронизацию времени

В распределенных системах часы серверов и клиентов могут расходиться. Параметр leeway задает допустимое отклонение в секундах.

JWT::$leeway = 30; // Разрешено отклонение на 30 секунд
$payload = ['user_id' => 42, 'exp' => time() + 3600]; // Токен истечет через 1 час
$token = JWT::encode($payload, 'secret');
$decoded = JWT::decode($token, 'secret', ['HS256']); // Учитывает параметр leeway

Проверить токен

Чтобы проверить токен и получить данные используйте метод decode.

use Bitrix\Main\Web\JWT;

$secret = 'ваш-секретный-ключ';
$jwt = 'токен-полученный-от-клиента';

try {
    $payload = JWT::decode($jwt, $secret, ['HS256']);
    // Токен верный, работаем с данными:
    echo 'Пользователь: ' . $payload->name;
} catch (Exception $e) {
    // Токен не прошёл проверку
    echo 'Ошибка: ' . $e->getMessage();
}

Всегда указывайте алгоритм в параметрах метода, например, ['HS256']. Иначе система может принять токен, подписанный слабым алгоритмом.

Возможные ошибки

  • Неверная подпись — ключ не совпадает.
  • Токен просрочен — если указан параметр exp.
  • Токен еще не активен — если указан параметр nbf.

Поддерживаемые алгоритмы подписи

Класс Bitrix\Main\Web\JWT поддерживает алгоритмы:

АлгоритмТип подписиИспользует
HS256HMAC + SHA-256Симметричный ключ
HS384HMAC + SHA-384Симметричный ключ
HS512HMAC + SHA-512Симметричный ключ
RS256RSA + SHA-256Пару ключей
RS384RSA + SHA-384Пару ключей
RS512RSA + SHA-512Пару ключей
ES256ECDSA + SHA-256Пару ключей
  • Алгоритмы HS\ проще в использовании, так как они используют один секретный ключ.
  • Алгоритмы RS\/ES\* — безопаснее, но требуют два ключа: публичный и приватный.

Рекомендации по безопасности

  • Не храните важные данные в JWT — токен можно раскодировать. Важные данные лучше хранить на сервере, а в токене передавать только ссылки или идентификаторы.
  • Храните ключ надежно — токены можно подделать при наличии ключа.
  • Используйте HTTPS — зашифрованное соединение защитит от перехвата токена.
  • Выбирайте надежный алгоритм — HS256 для простых случаев или RS256 для повышенной безопасности.

💡 Экспертное мнение и рекомендации

Ключевые выводы по теме «Jwt: Руководство разработчика»:

Использование современных стандартов D7 при работе с jwt позволяет писать чистый, масштабируемый и безопасный код. Не забывайте обрабатывать исключения (try/catch) и проверять права доступа текущего пользователя перед выполнением критических операций.

Похожая задача в бизнесе?

Помогу автоматизировать процессы и внедрить ИИ

Меня зовут Андрей Горошко. Я Full-stack разработчик и эксперт по 1С-Битрикс. Настраиваю CRM Битрикс24, разрабатываю защищенные API и создаю умных ИИ-агентов для автоматизации рутины.

Related Post

Как использовать метод SDK sale.statusLang.getFields в Битрикс24Как использовать метод SDK sale.statusLang.getFields в Битрикс24

Каждый PHP-разработчик, работающий с экосистемой Bitrix Framework, должен глубоко понимать работу её ключевых компонентов. В этой статье мы проведем подробный аудит темы «Как использовать метод SDK sale.statusLang.getFields в Битрикс24», проанализируем

Как использовать $APPLICATION->ShowMeta() в 1С-Битрикс: пример кодаКак использовать $APPLICATION->ShowMeta() в 1С-Битрикс: пример кода

Каждый PHP-разработчик, работающий с экосистемой Bitrix Framework, должен глубоко понимать работу её ключевых компонентов. В этой статье мы проведем подробный аудит темы «Как использовать $APPLICATION->ShowMeta() в 1С-Битрикс: пример кода», проанализируем

Разработка интернет-магазина на 1С-Битрикс с автоматической маркировкой «Честный Знак» под ключРазработка интернет-магазина на 1С-Битрикс с автоматической маркировкой «Честный Знак» под ключ

Внедрение функционала «с автоматической маркировкой «Честный Знак» под ключ» на платформе 1С-Битрикс позволяет существенно повысить средний чек, сократить операционные расходы и предоставить покупателям первоклассный сервис. бесшовная передача DataMatrix кодов в