Имя: Пароль:
1C
1С v8
Авторизация на WEB-сервере, WS-ссылки
0 AlexSTAL
 
26.08.19
11:09
Делаю интеграцию через WS-ссылку. Не взлетает, ругается на авторизацию.
Пользователь доменный.

Пробую просто скачать страницу с сервера:
Запрос = Новый HTTPЗапрос("/", Заголовки);
Результат = Соединение.Получить(Запрос);
Результат 401, не авторизован.

Начал разбирать в браузере в отладке, там в несколько запросов происходит обмен заголовками в режиме "запрос-ответ":
При первом GET получаем WWW-Authenticate
При втором GET отправляем WWW-Authenticate, получаем Set-Cookie и Location.
При третьем GET переходим по Location, передаём часть параметров из Set-Cookie.
И так 6 раз.

Затем формирую вручную API-запрос, корректно получаю ответ в виде строки.

А при использовании конструкции

ТОпределение = Новый WSОпределения("D:\Обмен\_api.wsdl");
Определение = ТОпределение.Сервисы[0];
Прокси = Новый WSПрокси(ТОпределение, Определение.URIПространстваИмен, Определение.Имя, Определение.ТочкиПодключения[0].Имя, , , Новый ЗащищенноеСоединениеOpenSSL(), , Истина);
Прокси.Пользователь = "DC\USER";
Прокси.Пароль       = "пароль";

не знаю, как провернуть такую авторизацию...
1 Gimalaj
 
26.08.19
12:08
(0) >> не знаю, как провернуть такую авторизацию...

Я отправил пример такой авторизации тебе на почту, указанную в личке.
2 Вафель
 
26.08.19
12:09
доменного пользователя нельзя передать через логин/пароль.
это должен быть сам пользователь сервера 1с
3 Вафель
 
26.08.19
12:09
имперсонализации в 1с нет
4 AlexSTAL
 
26.08.19
12:12
(1) Спасибо! Именно примерно так я и сделал. В результате получается JSON, его нужно парсить своими силами. Да и запросы нужно писать самому.
5 AlexSTAL
 
26.08.19
12:15
(2) Ну как бы не согласен:

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

отрабатывает именно как доменная авторизация и именно под пользователем, указанным в параметрах!
6 Gimalaj
 
26.08.19
12:49
(4) Немного не понял.
1. Запрос = Новый HTTPЗапрос("/", Заголовки); - вот здесь у тебя все работает, но в результате получаешь JSON, который нужно парсить вручную? Это я правильно понял?

2. Правильно ли я понял, что для того, чтобы избавиться от проблемы парсинга JSON-а, ты хочешь использовать ws-ссылки (т.е. то, где у тебя написано, начиная с "Новый WSОпределения("D:\Обмен\_api.wsdl"); ")?
7 AlexSTAL
 
26.08.19
12:53
(6) Пояснения

1. Да! Я изначально забыл в 0 вопросе вставить код создания Соединения

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

ну и соответственно получение GET:

Результат = Соединение.Получить(Запрос);

В результате у меня не JSON, а XML, но это дело не меняет.

2. Да!
8 Gimalaj
 
26.08.19
14:06
(7) Тогда х/з, в чем дело. У меня используется такая конструкция, может пригодится и тебе:

ssl = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаWindows(), Новый СертификатыУдостоверяющихЦентровWindows());
Определение = Новый WSОпределения(МестоположениеWSDL, Логин, Пароль,,, ssl);
Прокси = Новый WSПрокси(Определение, ПространствоИмен, Сервис, ТочкаПодключения,,,,АдресРесурса);
Прокси.Пользователь = Логин;
Прокси.Пароль = Пароль;
9 AlexSTAL
 
26.08.19
14:45
(8) С другими серверами у меня так же, проблем нет.
Я так понимаю, это какая-то извращённая авторизация...

Вот и хотелось бы совместить сначала авторизацию в "ручном" режиме через HTTPСоединение, а затем это соединение использовать в WSПрокси...