В собственных заголовках и нагрузке явно задаём учебные claims; этот конструктор не читает и не проверяет чужой JWT.
Где и как запускать
Полный серверный общий модуль УчебныеТокены. Вызовите экспортную процедуру ВыполнитьПример; не помещайте весь модуль внутрь другой процедуры.
Подготовка
Собственная учебная база, серверный общий модуль УчебныеТокены с флагом Сервер. Код полного модуля вставляйте на уровне модуля; вызовите ВыполнитьПример() из своей учебной обработки.
Все пользователи, эмитент, получатель и данные вымышленные. Никаких настоящих access_token, закрытых ключей, паролей или рабочих API.
Эти уроки создают проекты данных/политик в памяти, не подписывают токены, не аутентифицируют пользователя и не выдают права.
Используются свойства установленной платформы 8.5.1.1343. Сверка с документацией и тесты структуры не являются выполнением в настоящей 1С.
Процедура ВыполнитьПример() Экспорт
Заголовки = Новый Соответствие;
Заголовки.Вставить("typ", "JWT");
Заголовки.Вставить("alg", "RS256");
Нагрузка = Новый Соответствие;
Нагрузка.Вставить("iss", "guide-owned-issuer");
Нагрузка.Вставить("sub", "guide-user-001");
Нагрузка.Вставить("jti", "guide-owned-constructor-example");
НачалоUTC = Дата(2026, 10, 5, 10) - Дата(1970, 1, 1);
Нагрузка.Вставить("iat", НачалоUTC);
Нагрузка.Вставить("nbf", НачалоUTC);
Нагрузка.Вставить("exp", НачалоUTC + 300);
Получатели = Новый Массив;
Получатели.Добавить("guide-owned-reader");
Нагрузка.Вставить("aud", Получатели);
Нагрузка.Вставить("purpose", "own-book-lesson");
Токен = Новый ТокенДоступа(Заголовки, Нагрузка);
Сообщить(Токен.Заголовки.Получить("alg") = "RS256");
Сообщить(Токен.ПолезнаяНагрузка.Получить("iss") = "guide-owned-issuer");
Сообщить(Токен.ПолезнаяНагрузка.Получить("sub") = "guide-user-001");
Сообщить(Токен.ПолезнаяНагрузка.Получить("aud").Количество() = 1);
Сообщить(Токен.ПолезнаяНагрузка.Получить("exp") - Токен.ПолезнаяНагрузка.Получить("iat") = 300);
КонецПроцедурыРазбор по шагам
В отличие от конструктора без аргументов передаём два собственных Соответствие: заголовки и полезную нагрузку.
alg = RS256 здесь только строка в заголовках. Она не доказывает наличие RSA-подписи, проверенного ключа или работоспособного рабочего API.
iat/nbf/exp — собственные числовые значения в секундах. В данном проекте exp на 300 больше iat; срок действия ещё не проверяется относительно настоящего времени.
aud содержит массив строк, не строку со списком через запятую. purpose — отдельное учебное расширение полезной нагрузки.
Читаем созданный объект и его собственные значения. Не декодируем внешний токен, не изменяем пользовательские права.
Как проверить результат
Пять сравнений дают Истина; интервал собственных iat/exp равен 300 секундам.
Наличие alg не сопровождалось подписыванием. Нет сетевой авторизации и утверждения о действительности JWT.
Ожидаемый результат
Показан второй настоящий конструктор и точное различие проекта данных и проверенного токена.
На что обратить внимание
Нельзя доверять alg из полученного внешнего заголовка как инструкции выбрать любой ключ/алгоритм.
Конструктор не заменяет проверку подписи, эмитента, аудитории и времени. RFC 8725: https://www.rfc-editor.org/rfc/rfc8725.html#section-3.1
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.