Интеграция с внешним http сервисом. Вопросы по авторизации. Нужен пример
Предстоит интегрироваться с сервисом. Пока детаельного описания api нет, но поставщик формулирует задачу следующим образом:
"Аутентификация запросов парой токен/секретный ключ
Токен используется для первичной аутентификации,
секретный ключ используется для создания hash тела запроса на стороне API клиента
Секретный ключ не передается в запросе, хранится раздельно
hash добавляется в заголовки запроса
при получении запроса API проверяет токен, затем создает hash тела полученного запроса на своей стороне, сверяет с полученным в заголовке, отвечает ошибкой при несовпадении"
С http сервисами имел дело не однократно, но описанного подхода ни в одной интеграции не припомню. Как то было все проще. Наверное мало опыта. Вопрос. не вспмнит ли кто нибудь ПРИМЕР реализации такого подхода к авторизации, в какой либо интеграции? Чтобы можно былт подсмотреть.
"Аутентификация запросов парой токен/секретный ключ
Токен используется для первичной аутентификации,
секретный ключ используется для создания hash тела запроса на стороне API клиента
Секретный ключ не передается в запросе, хранится раздельно
hash добавляется в заголовки запроса
при получении запроса API проверяет токен, затем создает hash тела полученного запроса на своей стороне, сверяет с полученным в заголовке, отвечает ошибкой при несовпадении"
С http сервисами имел дело не однократно, но описанного подхода ни в одной интеграции не припомню. Как то было все проще. Наверное мало опыта. Вопрос. не вспмнит ли кто нибудь ПРИМЕР реализации такого подхода к авторизации, в какой либо интеграции? Чтобы можно былт подсмотреть.
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Вот кусок кода с аналогичным формированием подписи. Не факт, что у вас будет такой же алгоритм формирования, нужно смотреть описание API
/
/
/Создание списка параметров, таблица значений нужна чтобы потом отсортировать по ключу
ТаблицаПараметров = Новый ТаблицаЗначений;
ТаблицаПараметров.Колонки.Добавить("Ключ");
ТаблицаПараметров.Колонки.Добавить("Значение");
//Заполнение общих параметров
СтрокаПараметра = ТаблицаПараметров.Добавить();
СтрокаПараметра.Ключ = "app_key";
СтрокаПараметра.Значение = ПараметрыДоступа.КлючПриложения;
СтрокаПараметра = ТаблицаПараметров.Добавить();
СтрокаПараметра.Ключ = "format";
СтрокаПараметра.Значение = "json";
СтрокаПараметра = ТаблицаПараметров.Добавить();
СтрокаПараметра.Ключ = "session";
СтрокаПараметра.Значение = ПараметрыДоступа.ТокенДоступа;
СтрокаПараметра = ТаблицаПараметров.Добавить();
СтрокаПараметра.Ключ = "sign_method";
СтрокаПараметра.Значение = "md5";
СтрокаПараметра = ТаблицаПараметров.Добавить();
СтрокаПараметра.Ключ = "timestamp"; //Timestamp необходимо указывать в часовом поясе сервера GMT+8
СтрокаПараметра.Значение = Формат(УниверсальноеВремя(ТекущаяДата()) + 8*60*60, "ДФ='гггг-ММ-дд ЧЧ:мм:сс'");
СтрокаПараметра = ТаблицаПараметров.Добавить();
СтрокаПараметра.Ключ = "v";
СтрокаПараметра.Значение = "2.0";
//Дозаполнение входными параметрами
Если ТипЗнч(ВходныеПараметры) = Тип("Структура") Тогда
Для Каждого КлючИЗначение Из ВходныеПараметры Цикл
СтрокаПараметра = ТаблицаПараметров.Добавить();
СтрокаПараметра.Ключ = КлючИЗначение.Ключ;
СтрокаПараметра.Значение = КлючИЗначение.Значение;
КонецЦикла;
КонецЕсли;
//Вычисляем подпись и тело запроса
Данные = Новый Структура;
ТаблицаПараметров.Сортировать("Ключ"); //Необходимо для корректного формирования подписи
ДанныеДляПодписи = ПараметрыДоступа.СекретПриложения;
Для каждого СтрокаТЧ Из ТаблицаПараметров Цикл
ДанныеДляПодписи = ДанныеДляПодписи + СтрокаТЧ.Ключ + СтрокаТЧ.Значение;
КонецЦикла;
ДанныеДляПодписи = ДанныеДляПодписи + ПараметрыДоступа.СекретПриложения;
Хеш = Новый ХешированиеДанных(ХешФункция.MD5);
Хеш.Добавить(ДанныеДляПодписи);
Данные.Вставить("sign", СтрЗаменить(Строка(Хеш.ХешСумма), " ", ""));
Показать
(3) c post даже у новичка думаю сложностей не возникнет. сложности обычно возникают с пониманием последовательности вызовов, хранением данных сессии и их дальнейшем переиспользованием. поэтому и нужно описание конкретного сервиса, а не сферического коня в вакууме.
С большинством интернет сервисов идет интеграция с помощью токенов. Расскажу как чаще всего, от вашего может отличаться. Вы на сайте/сервисе авторизуетесь и получаете секретный ключ. Далее с помощью этого секретного ключа получаете токен. Этот токен вы передаете в теле или заголовках. Переодически токены устаревают(вы изменили пароль в сервисе, где то есть период действия токена) и нужно получать новый токен.
Hash это просто шифрование, нужно будет у них уточнять. В 1с делается с помощью объекта Новый ХешированиеДанных(<ХешФункция>)
Hash это просто шифрование, нужно будет у них уточнять. В 1с делается с помощью объекта Новый ХешированиеДанных(<ХешФункция>)
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот