|
Авторизация в честном знаке новыми методами. | ☑ | ||
---|---|---|---|---|
0
progaoff
14.02.24
✎
15:59
|
Добрый день, подскажите, есть у кого пример реализации получения аутентификационного токена в ЧЗ по новым методам?
https://markirovka.sandbox.crptech.ru/api/v3/true-api/auth/simpleSignIn; |
|||
1
timurhv
14.02.24
✎
16:07
|
Новый метод, это который 1-2 года уже по True API?
Функция Token(Запрос) АдресСервера = Запрос["ПараметрыЗапроса"].Получить("url"); ИННОрганизации = Запрос["ПараметрыЗапроса"].Получить("inn"); ДанныеТокена = Неопределено; АдресЗапросаКлючаСессии = "/api/v3/true-api/auth/key"; HTTPСервисЗапрос = Новый HTTPСоединение(АдресСервера,,,,,60, Новый ЗащищенноеСоединениеopenSSL()); Запрос = Новый HTTPЗапрос(АдресЗапросаКлючаСессии); Ответ = HTTPСервисЗапрос.Получить(Запрос); Если Ответ.КодСостояния = 200 Тогда ОтветСтруктура = ЗаполнитьСтруктуруИзОтветаJSON(Ответ.ПолучитьТелоКакСтроку()); Сертификат = Константы.Токен_СертификатЭЦП.Получить(); ПараметрыCMS = ЭлектроннаяПодписьСлужебныйКлиентСервер.ПараметрыCMS(); ПараметрыCMS.Открепленная = Ложь; Данные = Новый Структура("Данные, ПараметрыCMS", ОтветСтруктура.data, ПараметрыCMS); АдресРезультата = Неопределено; ОшибкаНаСервере = Новый Структура; ПараметрыДляСервера = Новый Структура; ПараметрыДляСервера.Вставить("Операция", "Подписание"); ПараметрыДляСервера.Вставить("ИдентификаторФормы", Новый УникальныйИдентификатор); ПараметрыДляСервера.Вставить("СертификатВерен", Истина); ПараметрыДляСервера.Вставить("СертификатПрограмма", Неопределено); ПараметрыДляСервера.Вставить("СертификатОтпечаток", Сертификат.Отпечаток); ПараметрыДляСервера.Вставить("ЭлементДанныхДляСервера", Новый Структура("Данные", ПоместитьВоВременноеХранилище(Данные))); ПараметрыДляСервера.Вставить("ТипПодписи", Неопределено); ПараметрыДляСервера.Вставить("ТребуетсяПроверка", Ложь); ПараметрыДляСервера.Вставить("Комментарий", ""); ПараметрыДляСервера.Вставить("ЗначениеПароля", ""); Успех = ЭлектроннаяПодписьСлужебныйВызовСервера.ВыполнитьНаСторонеСервера(ПараметрыДляСервера, АдресРезультата, Истина, ОшибкаНаСервере); Если Успех Тогда ПодписанныеДанные = ПолучитьИзВременногоХранилища(АдресРезультата); ПодписанныйФайл = ДвоичныеДанныеBase64(ПодписанныеДанные.Подпись); Тело = "{ |""uuid"": """ + ОтветСтруктура.uuid + """, |""data"": """ + ПодписанныйФайл + """, |""inn"": """ + ИННОрганизации + """ |}"; АдресЗапросаКлючаСессии = "api/v3/true-api/auth/simpleSignIn"; HTTPЗапрос = Новый HTTPЗапрос(АдресЗапросаКлючаСессии); HTTPЗапрос.Заголовки.Вставить("Content-Type","application/json;charset=UTF-8"); HTTPЗапрос.УстановитьТелоИзСтроки(Тело); Ответ = HTTPСервисЗапрос.ОтправитьДляОбработки(HTTPЗапрос); СтруктураОтветJSON = ЗаполнитьСтруктуруИзОтветаJSON(Ответ.ПолучитьТелоКакСтроку()); ДанныеТокена = Новый Структура(); ДанныеТокена.Вставить("Отпечаток", Сертификат.Отпечаток); ДанныеТокена.Вставить("Токен", СтруктураОтветJSON.token); КонецЕсли; КонецЕсли; Если ДанныеТокена <> Неопределено Тогда Ответ = Новый HTTPСервисОтвет(200); Ответ.УстановитьТелоИзСтроки(ОбщегоНазначения.ЗначениеВJSON(ДанныеТокена)); Иначе Ответ = Новый HTTPСервисОтвет(402, СтроковыеФункции.СтрокаЛатиницей(ОшибкаНаСервере.ОписаниеОшибки)); КонецЕсли; Возврат Ответ; КонецФункции Функция ЗаполнитьСтруктуруИзОтветаJSON(Знач ТекстJSON) Экспорт ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON.УстановитьСтроку(ТекстJSON); Попытка Возврат ПрочитатьJSON(ЧтениеJSON); Исключение Возврат Неопределено; КонецПопытки; КонецФункции Функция ДвоичныеДанныеBase64(ДвоичныеДанные) Экспорт Base64 = Base64Строка(ДвоичныеДанные); Base64 = СтрЗаменить(Base64, Символы.ПС, ""); Base64 = СтрЗаменить(Base64, Символы.ВК, ""); Возврат Base64; КонецФункции |
|||
2
timurhv
14.02.24
✎
16:09
|
Это код из http-сервиса, подписание на стороне сервера. Нужно адаптировать под клиента (если ЭЦП у него стоит).
|
|||
3
progaoff
14.02.24
✎
16:16
|
(1) Да, это оно. Огромное Спасибо!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |