Авторизация в 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 1 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 1 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 1 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 Тогда
        Возврат;
    КонецЕсли;

Показать
Оставьте свое сообщение

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