Интеграция с внешним http сервисом. Вопросы по авторизации. Нужен пример

1. user1532282 08.09.21 21:41 Сейчас в теме
Предстоит интегрироваться с сервисом. Пока детаельного описания api нет, но поставщик формулирует задачу следующим образом:
"Аутентификация запросов парой токен/секретный ключ
Токен используется для первичной аутентификации,
секретный ключ используется для создания hash тела запроса на стороне API клиента
Секретный ключ не передается в запросе, хранится раздельно
hash добавляется в заголовки запроса
при получении запроса API проверяет токен, затем создает hash тела полученного запроса на своей стороне, сверяет с полученным в заголовке, отвечает ошибкой при несовпадении"
С http сервисами имел дело не однократно, но описанного подхода ни в одной интеграции не припомню. Как то было все проще. Наверное мало опыта. Вопрос. не вспмнит ли кто нибудь ПРИМЕР реализации такого подхода к авторизации, в какой либо интеграции? Чтобы можно былт подсмотреть.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. DJ_Codebase 08.09.21 21:48 Сейчас в теме
(1) слишком абстрактное описание задачи. что за сервис? есть описание API?
5. t.v.s. 113 09.09.21 08:52 Сейчас в теме
(1) Вот кусок кода с аналогичным формированием подписи. Не факт, что у вас будет такой же алгоритм формирования, нужно смотреть описание API

/
/Создание списка параметров, таблица значений нужна чтобы потом отсортировать по ключу
	ТаблицаПараметров = Новый ТаблицаЗначений;
	ТаблицаПараметров.Колонки.Добавить("Ключ");
	ТаблицаПараметров.Колонки.Добавить("Значение");
	
	//Заполнение общих параметров
	СтрокаПараметра = ТаблицаПараметров.Добавить();
	СтрокаПараметра.Ключ = "app_key";
	СтрокаПараметра.Значение = ПараметрыДоступа.КлючПриложения;	
	СтрокаПараметра = ТаблицаПараметров.Добавить();
	СтрокаПараметра.Ключ = "format";
	СтрокаПараметра.Значение = "json";
	СтрокаПараметра = ТаблицаПараметров.Добавить();
	СтрокаПараметра.Ключ = "session";
	СтрокаПараметра.Значение = ПараметрыДоступа.ТокенДоступа;
	СтрокаПараметра = ТаблицаПараметров.Добавить();
	СтрокаПараметра.Ключ = "sign_method";
	СтрокаПараметра.Значение = "md5";
	СтрокаПараметра = ТаблицаПараметров.Добавить();
	СтрокаПараметра.Ключ = "timestamp"; //Timestamp необходимо указывать в часовом поясе сервера GMT+8
	СтрокаПараметра.Значение = Формат(УниверсальноеВремя(ТекущаяДата()) + 8*60*60, "ДФ='гггг-ММ-дд ЧЧ:мм:сс'");
	СтрокаПараметра = ТаблицаПараметров.Добавить();
	СтрокаПараметра.Ключ = "v";
	СтрокаПараметра.Значение = "2.0";

	//Дозаполнение входными параметрами
	Если ТипЗнч(ВходныеПараметры) = Тип("Структура") Тогда
		Для Каждого КлючИЗначение Из ВходныеПараметры Цикл
			СтрокаПараметра = ТаблицаПараметров.Добавить();
			СтрокаПараметра.Ключ 		= КлючИЗначение.Ключ;
			СтрокаПараметра.Значение 	= КлючИЗначение.Значение;
		КонецЦикла;
	КонецЕсли;
	
	//Вычисляем подпись и тело запроса 
	Данные = Новый Структура;
	ТаблицаПараметров.Сортировать("Ключ"); //Необходимо для корректного формирования подписи
	ДанныеДляПодписи = ПараметрыДоступа.СекретПриложения;  	
	Для каждого СтрокаТЧ Из ТаблицаПараметров Цикл	
		ДанныеДляПодписи = ДанныеДляПодписи + СтрокаТЧ.Ключ + СтрокаТЧ.Значение;
	КонецЦикла;	
	ДанныеДляПодписи = ДанныеДляПодписи + ПараметрыДоступа.СекретПриложения;
	Хеш = Новый ХешированиеДанных(ХешФункция.MD5);
	Хеш.Добавить(ДанныеДляПодписи);	
	Данные.Вставить("sign", СтрЗаменить(Строка(Хеш.ХешСумма), " ", ""));
Показать
3. user1532282 08.09.21 22:10 Сейчас в теме
Сервис какой то не понятный cms, пока только описан подход к авторизации. Для меня не понятно только это. Далее обычные post запросы, здесь не ожидается сложностей. Главное с авторизацией разобраться.
4. DJ_Codebase 08.09.21 22:40 Сейчас в теме
(3) c post даже у новичка думаю сложностей не возникнет. сложности обычно возникают с пониманием последовательности вызовов, хранением данных сессии и их дальнейшем переиспользованием. поэтому и нужно описание конкретного сервиса, а не сферического коня в вакууме.
6. coollerinc 196 09.09.21 11:20 Сейчас в теме
С большинством интернет сервисов идет интеграция с помощью токенов. Расскажу как чаще всего, от вашего может отличаться. Вы на сайте/сервисе авторизуетесь и получаете секретный ключ. Далее с помощью этого секретного ключа получаете токен. Этот токен вы передаете в теле или заголовках. Переодически токены устаревают(вы изменили пароль в сервисе, где то есть период действия токена) и нужно получать новый токен.

Hash это просто шифрование, нужно будет у них уточнять. В 1с делается с помощью объекта Новый ХешированиеДанных(<ХешФункция>)
7. user1532282 09.09.21 12:28 Сейчас в теме
(6) Спасибо. Буду ждать больше информации, чтобы разбираться предметно.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот