|
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) нет, не "проканает"
|
|||
|
11
Garykom
гуру
04.08.26
✎
12:51
|
(4)
Информационным базам, HTTP и Web сервисам через параметр запроса "AccessToken" или в заголовке "Authorization" можно передавать токен доступа в формате Base64URL https://wonderland.v8.1c.ru/blog/autentifikatsiya-s-pomoshchyu-jwt-tokenov/?sphrase_id=10220868
Разобрался.
https://forum.infostart.ru/forum15/topic281102/ Вместо этого для WSПрокси нужно было указывать местоположение без wsdl |
|||
|
12
Garykom
гуру
04.08.26
✎
12:51
|
НовоеМестоположениеWSDL = МестоположениеWSDL + "ws/dm.1cws?AccessToken=" + ТокенДоступа; Прокси = Новый WSПрокси(Определения, "http://www.1c.ru/dm , "DMService", "DMServiceSoap", ИнтернетПрокси, ТаймаутСервиса(), ЗащищенноеСоединение, НовоеМестоположениеWSDL, ИспользуетсяАутентификацияОС); |
|||
|
13
rozer76
04.08.26
✎
14:14
|
(12) почитал ветку, а в WSОпределения там что с Пользователь Пароль? Это пользователь в 1с с флагом "аутентификация 1с предприятия" ?
|
|||
|
14
Garykom
гуру
04.08.26
✎
13:26
|
(13) бросай программирование, это явно не твое
если там сообщение выше прочитать и сопоставить не можешь |
|||
|
15
rozer76
04.08.26
✎
14:00
|
(14) так и сделаю, спасибо
|
|||
|
16
Nedomolkov_
Ivan 04.08.26
✎
14:16
|
(13) Пользователь/Пароль в WSОпределения при таком варианте не нужны — токен и есть аутентификация. Пользователь в базе при этом должен существовать, токен на него маппится, пароль не участвует.
Важно другое: AccessToken надо ставить в ОБА адреса — и в тот, по которому тянется WSDL (Новый WSОпределения), и в местоположение сервиса, это 8-й параметр прокси. Дадите токен только прокси — 401 прилетит ещё на разборе WSDL. (11) поправка к моему (8) принимается: нативный путь есть, просто он не через заголовок, а через параметр адреса. Грабля на будущее: токен в query string оседает в логах веб-сервера и промежуточных прокси целиком. Держите TTL коротким и выключите логирование строки запроса на этой публикации. |
|||
|
17
rozer76
04.08.26
✎
15:23
|
(16) спасибо, но все равно в любых комбинациях ловлю то 400 то 402ую.
|
|||
|
18
Garykom
гуру
04.08.26
✎
15:49
|
Если на той стороне 1С то там нужны правильные настройки публикации на веб-сервере
В самой базе 1С у пользователя стоит галочка "Аутентификация токеном доступа" Возможно что еще читать мануалы |
|||
|
19
Nedomolkov_
Ivan 04.08.26
✎
15:52
|
(17) Разделите задачу пополам, иначе будете перебирать комбинации вслепую: возьмите тот самый адрес WSDL с токеном и откройте его браузером или curl-ом. WSDL не вернулся — WSПрокси вообще ни при чём, ломается публикация, и чинить надо там.
Два места, где это обычно и ломается: 1. Токен должен быть Base64URL. Обычный Base64 с плюсом, слэшем и знаком равенства на конце в строке запроса разъезжается: плюс превращается в пробел, хвост обрезается — получаете 400 на ровном месте. Либо URL-кодируйте, либо берите URL-safe алфавит. 2. Галочка у пользователя, про которую пишет (18) — без неё токен маппить не на кого, сколько ни правь адрес. Если WSDL по этому адресу отдаётся, а падает уже вызов метода — покажите, на чём именно: на конструкторе WSОпределения или на МетодСервиса. Это разные болезни. |
|||
|
20
rozer76
04.08.26
✎
18:20
|
(19) это все понятно но спасибо
1- я создаю токен через объект ТокенДоступа и он там уже в base64url 2- конечно в пользователе вкл флаг использовать токен. Я уже все перепробовал (конечно не исключено что я где-то сильно туплю) ... ну и заказчик решил что обойдемся без jwt. Может когда он обновится с 8.3.21 на что-то более свежее еще раз попробуем с ним завести jwt. А пока всем спасибо за участие. |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |