Подготовить учебные поля JWT без выдачи прав доступа

Учебные задачи

На собственном пользователе guide-user-001 разбираем iss/sub/aud/jti и время в секундах UnixTime; объект ещё не подписан.

Где и как запускать

Полный серверный общий модуль УчебныеТокены. Вызовите экспортную процедуру ВыполнитьПример; не помещайте весь модуль внутрь другой процедуры.

Подготовка

  1. Собственная учебная база, серверный общий модуль УчебныеТокены с флагом Сервер. Код полного модуля вставляйте на уровне модуля; вызовите ВыполнитьПример() из своей учебной обработки.

  2. Все пользователи, эмитент, получатель и данные вымышленные. Никаких настоящих access_token, закрытых ключей, паролей или рабочих API.

  3. Эти уроки создают проекты данных/политик в памяти, не подписывают токены, не аутентифицируют пользователя и не выдают права.

  4. Используются свойства установленной платформы 8.5.1.1343. Сверка с документацией и тесты структуры не являются выполнением в настоящей 1С.

Процедура ВыполнитьПример() Экспорт
    Токен = Новый ТокенДоступа;
    Токен.Эмитент = "guide-owned-issuer";
    Токен.КлючСопоставленияПользователя = "guide-user-001";
    Токен.Идентификатор = "guide-owned-token-" + Строка(Новый УникальныйИдентификатор);
    Токен.Получатели = Новый Массив;
    Токен.Получатели.Добавить("guide-owned-reader");
    УчебноеВремяUTC = Дата(2026, 10, 5, 10, 0, 0);
    УчебноеНачалоЭпохиUTC = Дата(1970, 1, 1, 0, 0, 0);
    Токен.ВремяСоздания = УчебноеВремяUTC - УчебноеНачалоЭпохиUTC;
    Токен.ВремяЖизни = 300;
    Токен.Заголовки.Вставить("typ", "JWT");
    Токен.Заголовки.Вставить("kid", "guide-owned-key-reference");
    Токен.ПолезнаяНагрузка.Вставить("purpose", "own-book-lesson");
    Сообщить(Токен.Эмитент = "guide-owned-issuer");
    Сообщить(Токен.КлючСопоставленияПользователя = "guide-user-001");
    Сообщить(Лев(Токен.Идентификатор, 18) = "guide-owned-token-");
    Сообщить(Токен.Получатели.Количество() = 1);
    Сообщить(Токен.Получатели.Получить(0) = "guide-owned-reader");
    Сообщить(ТипЗнч(Токен.ВремяСоздания) = Тип("Число"));
    Сообщить(Токен.ВремяЖизни = 300);
    Сообщить(Токен.Заголовки.Получить("typ") = "JWT");
    Сообщить(Токен.ПолезнаяНагрузка.Получить("purpose") = "own-book-lesson");
КонецПроцедуры

Разбор по шагам

  1. Эмитент соответствует iss, КлючСопоставленияПользователя — sub, Получатели — массив aud. Собственная строка sub не создаёт пользователя базы.

  2. Идентификатор задаёт jti; UUID помогает различать собственные черновики, но не является секретом или подписью.

  3. ВремяСоздания — число секунд UnixTime, не Дата и не миллисекунды. Обе фиксированные даты в примере явно трактуются как UTC; ТекущаяДата не выдаётся за UTC.

  4. ВремяЖизни = 300 означает пять минут. ВремяСоздания задаёт iat/nbf, время жизни участвует в exp по установленной справке.

  5. Заголовки и полезная нагрузка — Соответствие. typ и kid — метаданные, purpose — собственное учебное поле, не роль или разрешение.

  6. Подписать и проверка подписи отсутствуют. Это подготовка данных, а не действующий токен входа или авторизация API.

Как проверить результат

  1. Девять логических проверок дают Истина; время создания — Число, жизнь 300 секунд.

  2. В базе не появился пользователь, ни один API не вызван и никакие права не выданы.

Ожидаемый результат

Показаны все восемь свойств ТокенДоступа на понятных собственных данных.

На что обратить внимание

  1. Фиксированная дата годится для упражнения, не выпуска текущего рабочего токена.

  2. JWT-подпись не скрывает содержимое: реальные секреты не помещают в полезную нагрузку.

  3. Нельзя принимать iss/sub/aud без проверки криптографии и политики получателя. RFC 8725: https://www.rfc-editor.org/rfc/rfc8725.html#section-3.8

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.