Имя: Пароль:
1C
 
Два default.vrd к одной базе
0 АнализДанных
 
25.04.25
09:26
Добрый день, тема неоднократно поднималась, но какого-то конечного подробного ответа нигде не написано. Использую Апач. Интеграция с яндексом требует, чтобы в системе был HTTP-сервис для обменов:
1. Только для авторизации и получения токена. Он должен быть без авторизации к базе 1С, т.к. логин\пароль будет передан в сообщении сервиса.
2. Все остальные сервисы, которые авторизуются, через токен, полученный в п.1

Для отключения авторизации в п.1 мы прописываем в файле default.vrd логин\пароль пользователя из базы 1С, но это приводит к тому, чтоб абсолютно все сервисы перестают требовать авторизацию. Я вроде решил эту проблему, создал 2 разных HTTP-сервиса, для каждого сделал свой default.vrd, в одном прописал логин\пароль базы, а во втором убрал (подробней описал тут: https://forum.infostart.ru/forum15/topic294665/#message3161436). Но это решение привело к тому, что у меня получились разные пути к сервисам:
1. http:/MySite.ru/MyBase/hs/YandexEda/... - для основных сервисов
2. http:/MySite.ru/MyBase_YandexAuth/hs/YandexEdaAuth/... - для получения токена

Яндекс требует, чтобы начальный адрес к сервису был одинаковый, и для получения токена, и для обработки данных. Т.е. должно быть как-то так:
1. http:/MySite.ru/MyBase/hs/YandexEda/security/oauth/token - для токена
2. http:/MySite.ru/MyBase/hs/YandexEda/nomenclature/composition - для обработки данных

Подскажите, что и где надо прописать в конфигурационных файлах апача, чтобы к одному веб сервису или к одной базе было привязано 2 файла default.vrd.
Или может можно прописать какой-то редирект в файлах апач, чтобы при обращении к сервису его перебрасывало на другой ? Видел в документации, что есть что-то подобное, но не разобрался как это сделать.
1 Garykom
 
гуру
25.04.25
09:34
(0) подними nginx перед апачем и настрой там по url
заодно и ssl там поднимешь а не на апаче
ну и понятно имена сервисов исправишь как тебе надо, hs левое уберешь
https://interface31.ru/tech_it/2023/06/nastraivaem-nginx-kak-obratnyy-proksi-dlya-veb-publikacii-1spredpriyatie.html
2 Garykom
 
гуру
25.04.25
09:39
(1)+ вместо обычного Nginx лучше взять OpenResty
там скрипты Lua из коробки, которыми можно запросы программно как угодно почти обрабатывать
3 АнализДанных
 
28.04.25
22:56
Не хотелось мне использовать стороннее ПО, хотел решить задачу только средствами Apache. Мне удалось решить проблему, через Алиас, который указывается в httpd.conf
Предположим в http-сервисе "YandexEda" есть 2 метода с шаблонами:
1) security/oauth/token/
2) order/

Когда мы будем публиковать нашу базу с именем "MyBase", то мы должны будем сделать в httpd.conf два alias, в одном целиком укажем путь к нашему сервису с авторизацией вот так:
Alias "/MyBase/hs/YandexEda/security/oauth"....
и соответствующей путь к файлу defautl.vrd, где прописан логин\пароль из базы 1С
Во втором вот так:
Alias "/MyBase".....
и соответствующей путь к другому файлу defautl.vrd, где логин\пароль не указан.

Т.о в зависимости от url апач будет выбирать соответствующий файл "defautl.vrd". Как я понимаю он выбирает первый, который подошел по вхождению алиаса в url, соответственно тут еще важен порядок алиасов в файле httpd.conf.

Там есть еще некоторые нюансы, я чуть подробней описал здесь:
https://infostart.ru/1c/tools/1817924/#message3163393
4 banco
 
28.04.25
23:52
(0) Все сервисы яндекса пустите без логина, а токен в коде проверяйте
5 АнализДанных
 
29.04.25
10:31
(4) Рассматривал такой вариант, но тогда надо токен где-то хранить, срок действия проверять итд. Вариант в принципе рабочий. У меня тут больше спортивный интерес был,хотелось разобраться в этом вопросе. Этот вопрос очень часто задают на форумах, но решения нигде не описаны, я так понял что люди просто пускают без логин\пароля на всё сервисы Яндекса и не парятся.
В моей реализации мы просто выдаем токен, а дальше платформа сама проверяет при авторизации, что входящий токен валидный, а если он протух, то платформа ругнется соответствующим сообщением.