АлгоритмПодписиТокенаДоступа

Типы · AccessTokenSignAlgorithm

Содержит алгоритмы подписи токена доступа.

Полное описание, параметры и ограничения

АлгоритмПодписиТокенаДоступа (AccessTokenSignAlgorithm)

АлгоритмПодписиТокенаДоступа (AccessTokenSignAlgorithm)

Доступен, начиная с версии 8.3.21.

Свойства:
ES256 (ES256)
ES384 (ES384)
ES512 (ES512)
HS256 (HS256)
HS384 (HS384)
HS512 (HS512)
PS256 (PS256)
PS384 (PS384)
PS512 (PS512)
RS256 (RS256)
RS384 (RS384)
RS512 (RS512)
Нет (None)

Описание:

Содержит алгоритмы подписи токена доступа.

Доступность:

Сервер, толстый клиент.

Использование в версии:

Доступен, начиная с версии 8.3.21.

Методическая информация

Практические примеры

Выбрать алгоритм только из собственной доверенной политики

Полная функция сопоставляет имя алгоритма с типом ключа и параметрами; это подготовка политики, не реализация криптографии.

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

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

Подготовка

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

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

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

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

Процедура ВыполнитьПример() Экспорт
    Профиль = ПолучитьУчебныйПрофильАлгоритма("RS256", "RSA");
    Сообщить(Профиль.Алгоритм = АлгоритмПодписиТокенаДоступа.RS256);
    Сообщить(Профиль.МинимумБитКлюча = 2048);
    Сообщить(Профиль.Хеш = "SHA-256");
    HMAC = ПолучитьУчебныйПрофильАлгоритма("HS512", "HMAC");
    Сообщить(HMAC.МинимумБитКлюча = 512);
    Эллиптический = ПолучитьУчебныйПрофильАлгоритма("ES512", "EC");
    Сообщить(Эллиптический.Кривая = "P-521");
    ОтклонёнНет = Ложь;
    Попытка
        ПолучитьУчебныйПрофильАлгоритма("none", "RSA");
    Исключение
        ОтклонёнНет = Истина;
    КонецПопытки;
    Сообщить(ОтклонёнНет);
    ОтклонёнДругойКлюч = Ложь;
    Попытка
        ПолучитьУчебныйПрофильАлгоритма("HS256", "RSA");
    Исключение
        ОтклонёнДругойКлюч = Истина;
    КонецПопытки;
    Сообщить(ОтклонёнДругойКлюч);
КонецПроцедуры

Функция ПолучитьУчебныйПрофильАлгоритма(ДоверенноеИмя, ДоверенныйТипКлюча)
    Каталог = Новый Соответствие;
    Каталог.Вставить("HS256", Новый Структура("Алгоритм,ТипКлюча,МинимумБитКлюча,Хеш,Кривая", АлгоритмПодписиТокенаДоступа.HS256, "HMAC", 256, "SHA-256", ""));
    Каталог.Вставить("HS384", Новый Структура("Алгоритм,ТипКлюча,МинимумБитКлюча,Хеш,Кривая", АлгоритмПодписиТокенаДоступа.HS384, "HMAC", 384, "SHA-384", ""));
    Каталог.Вставить("HS512", Новый Структура("Алгоритм,ТипКлюча,МинимумБитКлюча,Хеш,Кривая", АлгоритмПодписиТокенаДоступа.HS512, "HMAC", 512, "SHA-512", ""));
    Каталог.Вставить("RS256", Новый Структура("Алгоритм,ТипКлюча,МинимумБитКлюча,Хеш,Кривая", АлгоритмПодписиТокенаДоступа.RS256, "RSA", 2048, "SHA-256", ""));
    Каталог.Вставить("RS384", Новый Структура("Алгоритм,ТипКлюча,МинимумБитКлюча,Хеш,Кривая", АлгоритмПодписиТокенаДоступа.RS384, "RSA", 2048, "SHA-384", ""));
    Каталог.Вставить("RS512", Новый Структура("Алгоритм,ТипКлюча,МинимумБитКлюча,Хеш,Кривая", АлгоритмПодписиТокенаДоступа.RS512, "RSA", 2048, "SHA-512", ""));
    Каталог.Вставить("PS256", Новый Структура("Алгоритм,ТипКлюча,МинимумБитКлюча,Хеш,Кривая", АлгоритмПодписиТокенаДоступа.PS256, "RSA", 2048, "SHA-256", ""));
    Каталог.Вставить("PS384", Новый Структура("Алгоритм,ТипКлюча,МинимумБитКлюча,Хеш,Кривая", АлгоритмПодписиТокенаДоступа.PS384, "RSA", 2048, "SHA-384", ""));
    Каталог.Вставить("PS512", Новый Структура("Алгоритм,ТипКлюча,МинимумБитКлюча,Хеш,Кривая", АлгоритмПодписиТокенаДоступа.PS512, "RSA", 2048, "SHA-512", ""));
    Каталог.Вставить("ES256", Новый Структура("Алгоритм,ТипКлюча,МинимумБитКлюча,Хеш,Кривая", АлгоритмПодписиТокенаДоступа.ES256, "EC", 256, "SHA-256", "P-256"));
    Каталог.Вставить("ES384", Новый Структура("Алгоритм,ТипКлюча,МинимумБитКлюча,Хеш,Кривая", АлгоритмПодписиТокенаДоступа.ES384, "EC", 384, "SHA-384", "P-384"));
    Каталог.Вставить("ES512", Новый Структура("Алгоритм,ТипКлюча,МинимумБитКлюча,Хеш,Кривая", АлгоритмПодписиТокенаДоступа.ES512, "EC", 521, "SHA-512", "P-521"));
    Каталог.Вставить("none", Новый Структура("Алгоритм,ТипКлюча,МинимумБитКлюча,Хеш,Кривая", АлгоритмПодписиТокенаДоступа.Нет, "", 0, "", ""));
    Профиль = Каталог.Получить(ДоверенноеИмя);
    Если Профиль = Неопределено Тогда
        ВызватьИсключение "Неизвестное имя алгоритма учебного профиля";
    КонецЕсли;
    Если Профиль.Алгоритм = АлгоритмПодписиТокенаДоступа.Нет Тогда
        ВызватьИсключение "В собственной учебной политике требуется подпись: none запрещён";
    КонецЕсли;
    Если Профиль.ТипКлюча <> ДоверенныйТипКлюча Тогда
        ВызватьИсключение "Алгоритм не подходит к доверенному типу ключа";
    КонецЕсли;
    Возврат Профиль;
КонецФункции

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

  1. Имя и тип ключа в примере заданы собственной доверенной конфигурацией. Они не берутся из заголовка чужого JWT.

  2. HS256/384/512 — HMAC с общим секретом, RS256/384/512 — RSA PKCS1-v1_5 подпись, PS256/384/512 — RSA-PSS подпись, ES256/384/512 — ECDSA. Параметры сопоставлены по RFC 7518: https://www.rfc-editor.org/rfc/rfc7518.html#section-3

  3. У HMAC минимальная длина ключа в битах соответствует размеру хеша или больше. У RSA здесь минимум 2048 бит; это параметры профиля, не измерение реального ключа.

  4. ES512 использует кривую P-521 и SHA-512, а не несуществующую P-512. У эллиптических ключей важно совпадение точной кривой, не только длина.

  5. Нет — штатное значение без подписи. В нашей учебной политике оно отвергается явным исключением, без создания неподписанного токена.

  6. Каталог параметров не является разрешением всех алгоритмов каждому сервису. В интеграции отдельно фиксируется конкретный разрешённый алгоритм и его ключ; при проверке нельзя выбирать алгоритм по недоверенному alg. RFC 8725: https://www.rfc-editor.org/rfc/rfc8725.html#section-3.1

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

  1. Семь сравнений дают Истина: выбран RS256/RSA, у HS512 минимум 512 бит, у ES512 P-521; none и HS256 с RSA отвергнуты.

  2. Неизвестное имя также вызывает исключение. Никакие ключи не загружены и криптографические операции не выполнялись.

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

Все тринадцать свойств алгоритмов показаны в конкретной задаче доверенного выбора и проверки совместимости параметров.

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

  1. Поле МинимумБитКлюча — ожидаемая политика, а не проверка реальной энтропии или длины ключа.

  2. Для рабочего сервиса нужен отдельный узкий список разрешений, проверка реального ключа, подписи, iss/aud и времени.

  3. Не переносите этот учебный каталог как автоматический выбор любого алгоритма из чужого токена.

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

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

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

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

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