Содержит алгоритмы подписи токена доступа.
Полное описание, параметры и ограничения
АлгоритмПодписиТокенаДоступа (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.
Методическая информация
Практические примеры
Выбрать алгоритм только из собственной доверенной политики
Полная функция сопоставляет имя алгоритма с типом ключа и параметрами; это подготовка политики, не реализация криптографии.
Где и как запускать
Полный серверный общий модуль УчебныеТокены. Вызовите экспортную процедуру ВыполнитьПример; не помещайте весь модуль внутрь другой процедуры.
Подготовка
Собственная учебная база, серверный общий модуль УчебныеТокены с флагом Сервер. Код полного модуля вставляйте на уровне модуля; вызовите ВыполнитьПример() из своей учебной обработки.
Все пользователи, эмитент, получатель и данные вымышленные. Никаких настоящих access_token, закрытых ключей, паролей или рабочих API.
Эти уроки создают проекты данных/политик в памяти, не подписывают токены, не аутентифицируют пользователя и не выдают права.
Используются свойства установленной платформы 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 запрещён";
КонецЕсли;
Если Профиль.ТипКлюча <> ДоверенныйТипКлюча Тогда
ВызватьИсключение "Алгоритм не подходит к доверенному типу ключа";
КонецЕсли;
Возврат Профиль;
КонецФункцииРазбор по шагам
Имя и тип ключа в примере заданы собственной доверенной конфигурацией. Они не берутся из заголовка чужого JWT.
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
У HMAC минимальная длина ключа в битах соответствует размеру хеша или больше. У RSA здесь минимум 2048 бит; это параметры профиля, не измерение реального ключа.
ES512 использует кривую P-521 и SHA-512, а не несуществующую P-512. У эллиптических ключей важно совпадение точной кривой, не только длина.
Нет — штатное значение без подписи. В нашей учебной политике оно отвергается явным исключением, без создания неподписанного токена.
Каталог параметров не является разрешением всех алгоритмов каждому сервису. В интеграции отдельно фиксируется конкретный разрешённый алгоритм и его ключ; при проверке нельзя выбирать алгоритм по недоверенному alg. RFC 8725: https://www.rfc-editor.org/rfc/rfc8725.html#section-3.1
Как проверить результат
Семь сравнений дают Истина: выбран RS256/RSA, у HS512 минимум 512 бит, у ES512 P-521; none и HS256 с RSA отвергнуты.
Неизвестное имя также вызывает исключение. Никакие ключи не загружены и криптографические операции не выполнялись.
Ожидаемый результат
Все тринадцать свойств алгоритмов показаны в конкретной задаче доверенного выбора и проверки совместимости параметров.
На что обратить внимание
Поле МинимумБитКлюча — ожидаемая политика, а не проверка реальной энтропии или длины ключа.
Для рабочего сервиса нужен отдельный узкий список разрешений, проверка реального ключа, подписи, iss/aud и времени.
Не переносите этот учебный каталог как автоматический выбор любого алгоритма из чужого токена.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.