Имя: Пароль:
1C
 
JWT и WSПрокси
0 rozer76
 
02.08.26
12:50
Привет, научите аутентифицировать вызов к 1с-вебсервису через JWT. Такое возможно вообще? С Htpp сервисом такое работает - в заголовке можно передать bearer но как с wsпрокси? Это возможно или только Basic-аутентификация?
1 timurhv
 
02.08.26
22:53
Может так проканает?
https://clck.ru/3V56QS
2 rozer76
 
03.08.26
08:25
(1) интересная ссылка, попробую спасибо. Топовые ИИ и Напарник такую ерунду предлагают

Процедура ВызватьSOAPСервисСJWT()
    WSОпределения = Новый WSОпределения("http://ваш_сервер/YourService.1cws?wsdl");
    WSПрокси = Новый WSПрокси(WSОпределения, "http://your_namespace.ru/", "YourService", "YourServiceSoap");
    
    HTTPСоединение = Новый HTTPСоединение("ваш_сервер", 443, , , , , Новый ЗащищенноеСоединениеOpenSSL());
    JWTТокен = "your_jwt_token_here";
    HTTPСоединение.Заголовки.Добавить("Authorization", "Bearer " + JWTТокен);
    WSПрокси.Сессия.HTTPСоединение = HTTPСоединение;
    
    Попытка
        Результат = WSПрокси.МетодСервиса(Параметры);
    Исключение
        Сообщить("Ошибка вызова SOAP-сервиса: " + ОписаниеОшибки());
    КонецПопытки;
КонецПроцедуры
3 kuromanlich
 
03.08.26
12:36
https://wonderland.v8.1c.ru/blog/autentifikatsiya-s-pomoshchyu-jwt-tokenov/?sphrase_id=10220868

    Запрос = Новый HTTPЗапрос("http://example.com/hs/testService?AccessToken=" + ТокенДоступа);
    Или
    Запрос = Новый HTTPЗапрос("http://example.com/hs/testService");
    Запрос.ДобавитьТокенДоступа(ТокенДоступа);
    Или
    Заголовки = Новый Соответствие;
    Заголовки.Вставить("Authorization", "Bearer " + ТокенДоступа);
    Запрос = Новый HTTPЗапрос("http://example.com/hs/testService" , Заголовки);
4 rozer76
 
03.08.26
18:43
(3) есть разница между вебсервисом и хттпсервисом..как бы)
5 rozer76
 
03.08.26
18:47
Если кому интересно, накидали тут но не то... хочу натива https://forum.infostart.ru/forum86/topic342454/
6 Garykom
 
гуру
03.08.26
18:55
хочешь натива?
ну так берешь и пишешь сам через HTTPСоединение
нашел проблему

только вот задолбаешься...
7 rozer76
 
04.08.26
06:41
(6) нативно=естественно и это wsпрокси а не это вот все..
8 Nedomolkov_
Ivan
 
04.08.26
08:17
(0) У WSПрокси заголовков нет в принципе: только Пользователь/Пароль (Basic), таймаут и защищённое соединение. Bearer туда не пролезет, а код из (2) даже не соберётся — свойства Сессия у прокси не существует, это фантазия модели.

Что реально работает:
1. Реверс-прокси перед публикацией: клиент шлёт Bearer, nginx валидирует JWT и уходит в 1С по Basic. Токен-логика живёт вне 1С, WSПрокси на клиенте не трогаем вообще.
2. Если токен нужен ради безопасности, а не ради протокола — mTLS: ЗащищенноеСоединениеOpenSSL с клиентским сертификатом, это нативно с обеих сторон и WSПрокси его принимает параметром.
3. Собирать SOAP-конверт руками и слать HTTPСоединением с заголовком, как в (6). Конверт генерится из WSDL один раз, больно не это — больно переделывать его на каждое изменение контракта.

И отдельная грабля к (2): WSОпределения сам тянет WSDL по сети и упрётся в ту же аутентификацию. Кладите WSDL локально файлом, иначе 401 прилетит ещё до вызова метода.
9 rozer76
 
04.08.26
08:33
(8) спасибо за развернутый грамотный ответ, SSL есть, остаемся на Basic. Только каждой МП сделаем свой логин и так даже логировать проще чем все через один ходят.
10 rozer76
 
04.08.26
11:56
(1) нет, не "проканает"
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс