Отключить авторизацию для http сервиса 1с
Механизм Web-сервисов позволяет использовать 1С:Предприятие 8 как набор сервисов в сложных распределенных и гетерогенных системах, а также позволяет интегрировать 1С:Предприятие 8 с другими промышленными системами использованием сервисно-ориентированной архитектуры.
Публикация веб-сервисов выполняется через конфигуратор, для этого нужно открыть окно Публикация на веб-сервере, нажав Администрирование -> Публикация на веб-сервере.
Процесс публикации описывать не буду, для каждого случая он свой, но обычно достаточно выбрать веб-сервер, указать каталог публикации и нажать на кнопку Опубликовать.
Послу публикации в указанном каталоге создастся файл default.vrd. Его содержимое будет примерно таким:
Тег ws содержит описание публикации веб-сервисов. Если мы обратимся к веб-сервису с помощью браузера, введя его адрес, например, http://192.168.0.85/DemoSSL/ws/exchange.1cws, то увидим окно авторизации, которое попросит ввести логи и пароль пользователя 1С:
2. Окно авторизации веб-сервиса |
[СетевойАдресКомпьютера]/[ИмяПубликации]/ws/[АдресВебСервиса]
Создадим пользователя 1С с логином User и паролем 123456, от имени которого в дальнейшем будет происходить автоматическая авторизация.
Замечено, окно авторизации корректно работает с логином, написанным на латинице, иначе может появится ошибка:
Допустим, необходимо, что бы веб-сервис exchange.1cws не требовал авторизацию. Для этого из файла default.vrd удаляем информацию о данном веб-сервисе, то есть удаляем строчки:
alias="exchange.1cws"
enable="true"/>
Создаем рядом с файлом default.vrd файл с именем exchange и расширением 1cws (exchange.1cws). Откроем файл текстовым редактором, укажем кодировку UTF-8 без BOM и запишем следующие строчки:
namespace="http://www.1c.ru/SSL/Exchange"
name="Exchange"
connectString="File="C:\1с\БиблиотекаСтандартныхПодсистем\DemoSSL";usr="User";pwd="123456""/>
- namespace - указываем пространство имен веб-сервиса (см. рисунок 3);
- name - указываем имя сервиса (см. рисунок 1);
- connectString - указывается расположение информационной базы (см. рисунок 4) + логин и пароль пользователя, от имени которого будет производиться авторизация. Для файлового варианта и клиент-серверного значение данного атрибута будет отличаться. Пример для клиент-серверного варианта: Srvr="localhost";Ref="DemoSSL";usr="User";pwd="123456"
UPD 15.03.2016:
Если стоит апач(а может и не только) — то по дефолту 1С пытается авторизовать пользователя системы вида: \\[DOMAIN]\HOSTNAME$, если в базе создать такого пользователя с авторизацией системы — то плясать с бубном не нужно, а дальше рулите ролями.
UPD 12.04.2017:
Создать в операционной системе пользователя, под ним настроить запуск Apache. В 1С завести пользователя, установить галку Аутентификация операционной системы и выбрать пользователя Apache. Правда при такой настройке не получится выборочной аутентификации - будут доступны все сервисы, связанные с WEB.
подскажите настроил сервис. выводит пользователям список документов. сделал без авторизации. вот пример файла vrd
?xml version="1.0" encoding="UTF-8"?>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
base="/srvimp"
ib="File="C:\1c\test";usr=site;pwd=12345"
enableStandardOData="true">
enable="true"/>
но как при обращении к базе через веб интерфейс захожу под пользователем site а хотелось бы под своим. подскажите как настроить параметры для входа под своим логином?
(3)(3) flyer, Сделайте учетку для вебсервиса и опубликуйте в другой папке или на другом вебсервере, смотря на что хватит навыка.
Делаешь две публикации одна для просто просмотра документов с прописанным пользователем и паролем в VRD, и вторую где пользователи логинятся.
(7)Спасибо помогло!
Создал вторую публикацию
Скопировал туда ВРД из основной публикации, прописал в скопированном врд автологин, теперь на одном урле обычный веб клиент с запросом пароля на другом урле хттп сервис
(12) Но как создать вторую публикацию? Скопировать папку с новым именем, добавить автологон в строку подключения в vrd и создать на IIS новое приложение с указанием пути к этой папке? Я так пробовал, не работает. Просит авторизацию.
Расскажите по шагам, плз.
С уважением, Андрей
Логин и пароль можно дописать перед именем сервера
Правда этот метод работает во всех браузерах, кроме IE
(9) serko8547, Привет! По факту нет опыта написания команд для подключения к 1C через GET/PUT запросы. Но думаю, что это возможно. В этом и состоял вопрос может у Вас есть этот опыт и Вы можете поделиться информацией и объяснить что и как нужно делать правильно. Спасибо за понимание.
Пример действий для IIS
1) Есть папка client со стадартной авторизацией, публикация сделана из конфигуратора.
2) Копируем папку, называем ее api
3) В IIS конвертим в веб приложение.
4) В .vrd файл добавляем логин и пароль, а так же самое важное изменение, без него не будет работать, нужно сменить директиву base="/client" соответственно на base="/api"
В Апаче все тоже самое только 3 шаг меняется на правку конфига апача.
В Апаче все тоже самое только 3 шаг меняется на правку конфига апача.
Не подскажите какие настройки нужно сделать в апаче?
Для публикации http-сервисов на Linux без авторизации через webinst:
Делаем две публикации:
webinst -apache24 -wsdir BASENAME -dir /var/www/base -connstr "Srvr=localhost;Ref=BASE" -confPath /etc/apache2/apache2.conf
webinst -apache24 -wsdir BASENAME-NOAUTH -dir /var/www/base-noauth -connstr "Srvr=localhost;Ref=BASE" -confPath /etc/apache2/apache2.conf
Иногда нужно отключить авторизацию на вебсервере для одного из вебсервисов (сделать его общедоступным), или в принципе выставить один вебсервис "наружу", оставив остальные доступными только из локальной сети.
В принципе, задачу можно решить, создав руками вторую публикацию с нужными сервисами, но тогда приходится заморачиваться с настройками доступа для этой публикации.
Для себя я решил эту проблему с помощью универсального "прокси", который ставится на любой веб-сервер с установленным php с модулем curl, который перенаправляет входной поток запроса на внутренний сервер, параллельно подменяя имя пользователя и пароль.
Настройка сводится к замене переменных:
на нужные значения. Скрипт также подменяет адрес сервиса в wsdl'е, полученном от 1с на свой, так что работа скрипта становится вообще прозрачной.
Естественно, у самого скрипта должен быть доступ к "основной" публикации 1с.
Совсем отключить авторизацию скрипта можно закомментировав строки с 11 по 16.
Файл в архиве, так как инфостарт не принимает файлы php
Сам текст скрипта, если у кого-то нет смартмани, чтобы его скачать:
Специальные предложения
Интересно.
Не понятно только куда этот скрипт подключать.
в каком месте всей инфраструктуры его ставить?
(1) Makushimo, на тот сервер, на котором вы планируете опубликовать общедоступный сервис. Это может быть тот же сервер, на котором крутится публикация 1с, но не обязательно, главное, чтобы с него был доступ до того сервера, на котором публикация 1с.
Требования к серверу - php 5 с установленным модулем curl, ОС не важна.
Иногда нужно отключить авторизацию на вебсервере для одного из вебсервисов (сделать его общедоступным), или в принципе выставить один вебсервис "наружу", оставив остальные доступными только из локальной сети.
В принципе, задачу можно решить, создав руками вторую публикацию с нужными сервисами, но тогда приходится заморачиваться с настройками доступа для этой публикации.
Для себя я решил эту проблему с помощью универсального "прокси", который ставится на любой веб-сервер с установленным php с модулем curl, который перенаправляет входной поток запроса на внутренний сервер, параллельно подменяя имя пользователя и пароль.
Настройка сводится к замене переменных:
на нужные значения. Скрипт также подменяет адрес сервиса в wsdl'е, полученном от 1с на свой, так что работа скрипта становится вообще прозрачной.
Естественно, у самого скрипта должен быть доступ к "основной" публикации 1с.
Совсем отключить авторизацию скрипта можно закомментировав строки с 11 по 16.
Файл в архиве, так как инфостарт не принимает файлы php
Сам текст скрипта, если у кого-то нет смартмани, чтобы его скачать:
Специальные предложения
Интересно.
Не понятно только куда этот скрипт подключать.
в каком месте всей инфраструктуры его ставить?
(1) Makushimo, на тот сервер, на котором вы планируете опубликовать общедоступный сервис. Это может быть тот же сервер, на котором крутится публикация 1с, но не обязательно, главное, чтобы с него был доступ до того сервера, на котором публикация 1с.
Требования к серверу - php 5 с установленным модулем curl, ОС не важна.
Началось все с вопроса "А можно ли сделать так чтобы любой желающий мог получить доступ к нашему веб-клиенту, и для этого не нужно было бы всех заводить руками?". А дальше начались поиски решения) Задача стояла весьма увлекательная. Я, как человек мельком знакомый с веб-разработкой, и по основному профилю специализирующийся на разработке в 1С, видел свет в конце туннеля, но короткого пути не знал) Для решения моей задачи я обратился в интернет. Результатом поисков, проб и ошибок, стало такое решение.
Тестировалось все на
1. 1С 8.3.8 и 1С 8.3.13, но думаю будет работать и на других релизах 8.3
1. Универсальная форма для входа и регистрации в базе 1С. При логине пользователь не видит стандартного окна аутентификации 1С
3. Восстановление пароля пользователя 1С из веб-формы
4. При регистрации и восстановлении пароля пользователь получает письма с паролями
Для простоты разворачивания демонстрационной базы будем использовать Apache, великий и могучий. Он прост и понятен в настройке, для наших целей, это его главное преимущество перед всевозможными проблемами IIS.
После этого по экрану побегут строки, для нас главное увидеть, что везде написано Success и не написано Error. Как правило установка сервиса проходит успешно, и ошибки в основном происходят в момент ее тестового запуска. Если увидели ошибки, то как правило все они хорошо гуглятся и быстро решаются.
После того как установка прошла успешно желательно зайти в папку Apache\bin в проводнике и запустить ApacheMonitor. Для того чтобы в трее появился интерфейс быстрого управления службой Apache.
Заходим в браузере по адресу http://localhost если написано "It work's" значит все в порядке.
Для того чтобы потом удалить Apache нужно тоже зайти в консоль, выполнить то же самое. но с ключом -k uninstall
8. После установки Apache нужно установить модуль расширения web-сервера 1С. Для этого зайдите в список установленных приложений, выберите 1С, и нажмите "Изменить", после в диалоге установки выберите в списке прочего "Модуль расширения web-сервиса"
9. Установка окружения завершена. Остался только сам процесс публикации, который выполняется в пару кликов. Описывать не буду, надеюсь рядовой одинесник без труда с этим разберется. на этом все.
Архитектура решения такова:
Нам остается только подставить правильный адрес в атрибут action нашей формы. И готово.
С остальными функциями веб-формы логина все не так просто.
Хочется переделать на CURL для расширенной работы с ответом веб-сервиса, и переделать вызовы на AJAX. Но пока так.
3. Следующим по очереди идет файл config.php в папке assets, в нем указаны конфигурационные данные для подключения к нашему веб-сервису. код прост и незатейлив. Но сильно упрощает подключение.
из этого файла выбираются параметры для всех операций
4. и style.css, но это не так интересно. Стили здесь не главное.
Дальше переходим к стороне 1С.
Здесь у нас все довольно прозаично. Конфигурация содержит http-сервис "Пользователи" с двумя шаблонами
/register и /resetPassword
Оба шаблона содержат POST-методы и устроены однообразно
Листинг функции регистрации в упрощенном виде выглядит так
Листинг функции восстановления пароля устроен подобным образом
Для тех кто станет это скачивать и пробовать. Нужно сделать следующее
1. .Заполнить параметры подключения к почтовому серверу в процедуре ПочтовыйПрофиль(), тогда почта начнет отправляться.
Читайте также: