Авторизация в HTTP запросе.

1. Grema789 3 21.09.23 12:11 Сейчас в теме
Добрый день, Коллеги!
Подскажите пожалуйста куда смотреть или куда копать. Не могу пройти авторизацию через HTTP сервис из 1С. Так же не могу пройти авторизацию через постман.
1) Пробовал пароль передавать в заголовке в параметре Authorization в виде Base64 в виде "Basic +Пароль"
2) Игрался с доменом в Punycode
3) Передавал логин и пасс на вкладке авторизации с типом Basic Auth
В 1С уже как только не извращался. Если делать через 1С, то пишет 301 ошибку

Домен
https://xn--c1abmmpq.xn--p1ai/container/full/
https://дислог.рф/container/full/
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
2. Vlaxrom 2 21.09.23 12:33 Сейчас в теме
Обычный form-data:
Сервер = "дислог.рф";
Порт = 443;
Сервис = "/user/index.php";

Ssl = Новый ЗащищенноеСоединениеOpenSSL();
Прокси = Новый ИнтернетПрокси(Ложь);
СоединениеHTTP = Новый HTTPСоединение(Сервер, Порт, , , Прокси,,Ssl);

Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type","multipart/form-data; boundary=""5855a778-d8e5-4988-bc8a-5c4b45d3f00e""");

ЗапросHTTP = Новый HTTPЗапрос(Сервис, Заголовки);
ТелоЗапроса = "
|
|--5855a778-d8e5-4988-bc8a-5c4b45d3f00e
|Content-Type: text/plain; charset=UTF-8
|Content-Disposition: form-data; name='pass'
|
|*ВАШ ПАРОЛЬ*
|--5855a778-d8e5-4988-bc8a-5c4b45d3f00e
|--5855a778-d8e5-4988-bc8a-5c4b45d3f00e
|Content-Type: text/plain; charset=UTF-8
|Content-Disposition: form-data; name='login'
|
|*ВАШ ПАРОЛЬ*
|--5855a778-d8e5-4988-bc8a-5c4b45d3f00e--";

ЗапросHTTP.УстановитьТелоИзСтроки(ТелоЗапроса);

Результат = СоединениеHTTP.ОтправитьДляОбработки(ЗапросHTTP);

Если Результат.КодСостояния <> 200 Тогда
   //Ошибка выполнения запроса
КонецЕсли;

Данные = Результат.ПолучитьТелоКакСтроку();
Показать
Прикрепленные файлы:
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. Vlaxrom 2 21.09.23 12:33 Сейчас в теме
Обычный form-data:
Сервер = "дислог.рф";
Порт = 443;
Сервис = "/user/index.php";

Ssl = Новый ЗащищенноеСоединениеOpenSSL();
Прокси = Новый ИнтернетПрокси(Ложь);
СоединениеHTTP = Новый HTTPСоединение(Сервер, Порт, , , Прокси,,Ssl);

Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type","multipart/form-data; boundary=""5855a778-d8e5-4988-bc8a-5c4b45d3f00e""");

ЗапросHTTP = Новый HTTPЗапрос(Сервис, Заголовки);
ТелоЗапроса = "
|
|--5855a778-d8e5-4988-bc8a-5c4b45d3f00e
|Content-Type: text/plain; charset=UTF-8
|Content-Disposition: form-data; name='pass'
|
|*ВАШ ПАРОЛЬ*
|--5855a778-d8e5-4988-bc8a-5c4b45d3f00e
|--5855a778-d8e5-4988-bc8a-5c4b45d3f00e
|Content-Type: text/plain; charset=UTF-8
|Content-Disposition: form-data; name='login'
|
|*ВАШ ПАРОЛЬ*
|--5855a778-d8e5-4988-bc8a-5c4b45d3f00e--";

ЗапросHTTP.УстановитьТелоИзСтроки(ТелоЗапроса);

Результат = СоединениеHTTP.ОтправитьДляОбработки(ЗапросHTTP);

Если Результат.КодСостояния <> 200 Тогда
   //Ошибка выполнения запроса
КонецЕсли;

Данные = Результат.ПолучитьТелоКакСтроку();
Показать
Прикрепленные файлы:
3. Grema789 3 21.09.23 16:05 Сейчас в теме
(2)
Да, в постмане получилось повторить, но в 1С не хочет взлетать. Пароль пробовал в разных вариантах и base64. Причем, что интересно в постмане сначала нужно зайти на users/index.php и только после этого можешь дальше делать запросы. Как оно работает? Он получает токен и с этим токеном уже работает?
4. Vlaxrom 2 21.09.23 16:11 Сейчас в теме
Вероятно тогда вам нужно передать ещё какую "Куку" при отправке данных.
Попробуйте использовать "http-коннектор", зайти сначала на страницу index.php и в рамках этой же сессии пройти авторизацию.
5. Grema789 3 21.09.23 17:31 Сейчас в теме
Спасибо! Все получилось!
При первом запросе POST мы в заголовке получаем куки. Далее я посмотрел в постмане как формируется второй запрос GET когда уже пройдена авторизация и сформировал заголовки по аналогии подставив куки полученные в первом запросе.

//Сохраняем куки из запроса авторизации
Cookie = Ответ.Заголовки["Set-Cookie"];
	
HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса2);
HTTPЗапрос.Заголовки.Вставить("Accept", "application/json");
HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/json");
HTTPЗапрос.Заголовки.Вставить("lang", "ru");
//Передаем куки в новый запрос
HTTPЗапрос.Заголовки.Вставить("Cookie", Cookie);
Показать
6. Grema789 3 21.09.23 17:38 Сейчас в теме
Полное решение получилось таким
	Сервер = "дислог.рф";
	Порт = 443;
	Сервис 	= "/user/index.php"; 
	Логин	= "ЛОГИН";
	Пароль  = "ПАРОЛЬ";
	
	Ssl = Новый ЗащищенноеСоединениеOpenSSL();
	Прокси = Новый ИнтернетПрокси(Ложь);
	СоединениеHTTP = Новый HTTPСоединение(Сервер, Порт, , , Прокси,,Ssl);   
	
	ВремГраница = СтрЗаменить(Новый УникальныйИдентификатор, "-", "");	
	ТелоЗапроса = Новый ТекстовыйДокумент();
	ТелоЗапроса.РазделительСтрок = Символы.CR+Символы.LF;
	ТелоЗапроса.ДобавитьСтроку("--" + ВремГраница);
	ТелоЗапроса.ДобавитьСтроку("Content-Disposition: form-data; name=""login"";");
	ТелоЗапроса.ДобавитьСтроку("");
	ТелоЗапроса.ДобавитьСтроку(Логин); 
	ТелоЗапроса.ДобавитьСтроку("--" + ВремГраница);
	ТелоЗапроса.ДобавитьСтроку("Content-Disposition: form-data; name=""passwd"";");
	ТелоЗапроса.ДобавитьСтроку("");   
	ТелоЗапроса.ДобавитьСтроку(Пароль);
	ТелоЗапроса.ДобавитьСтроку("--" + ВремГраница + "--");

	ТелоЗапросаСтрока = ТелоЗапроса.ПолучитьТекст();
	
	HTTPЗапрос = Новый HTTPЗапрос(Сервис);
	
	HTTPЗапрос.Заголовки["Content-Type"] = "multipart/form-data; boundary=" + ВремГраница;
	HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапросаСтрока, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
	HTTPОтвет = СоединениеHTTP.ОтправитьДляОбработки(HTTPЗапрос);
	
	Если HTTPОтвет.КодСостояния <> 200 Тогда
		Возврат;
	КонецЕсли;
	
	Cookie= Лев(HTTPОтвет.Заголовки["Set-Cookie"],36);	
	HTTPЗапрос = Новый HTTPЗапрос("/container/full/");
	HTTPЗапрос.Заголовки.Вставить("Accept", "*/*");  
	HTTPЗапрос.Заголовки.Вставить("Accept", "Basic ");
	HTTPЗапрос.Заголовки.Вставить("Content-Type", "keep-alive");	
	HTTPЗапрос.Заголовки.Вставить("Cookie", Cookie);
	HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапросаСтрока, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
	
	HTTPОтвет = СоединениеHTTP.Получить(HTTPЗапрос);
	
	Данные = HTTPОтвет.ПолучитьТелоКакСтроку();
	
	Если HTTPОтвет.КодСостояния <> 200 Тогда
		Возврат;
	КонецЕсли;
Показать
Оставьте свое сообщение
Вакансии
1С-Программист (интегратор Битрикс24)
Санкт-Петербург
зарплата от 150 000 руб. до 250 000 руб.
Полный день

Разработчик 1С
Москва
зарплата от 100 000 руб.
Временный (на проект)

Разработчик 1С
Москва
зарплата от 150 000 руб.
Полный день

Программист
Санкт-Петербург
зарплата от 180 000 руб. до 240 000 руб.
Полный день

Разработчик 1С
Москва
зарплата от 150 000 руб. до 250 000 руб.
Полный день