АйТиБложик
Маленький IT блог с характером 1С.
Страницы
Поиск по блогу
четверг, 18 июня 2015 г.
Убираем авторизацию пользователя у веб-сервиса
xmlns:xs=»http://www.w3.org/2001/XMLSchema»
xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance»
base=»/DemoSSL»
ib=»File=»C:\1с\БиблиотекаСтандартныхПодсистем\DemoSSL»;»>
Тег ws содержит описание публикации веб-сервисов. Если мы обратимся к веб-сервису с помощью браузера, введя его адрес, например, http://192.168.0.85/DemoSSL/ws/exchange.1cws, то увидим окно авторизации, которое попросит ввести логи и пароль пользователя 1С:
2. Окно авторизации веб-сервиса |
Обратите внимание, адрес к веб-сервису строится по следующему шаблону:
[СетевойАдресКомпьютера]/[ИмяПубликации]/ws/[АдресВебСервиса]
а?б?б?аЕаНб?аИб?аИаКаАб?аИб? аПаОаЛб?аЗаОаВаАб?аЕаЛб? аНаЕ аВб?аПаОаЛаНаЕаНаА.
An error occurred processing this request.
Допустим, необходимо, что бы веб-сервис exchange.1cws не требовал авторизацию. Для этого из файла default.vrd удаляем информацию о данном веб-сервисе, то есть удаляем строчки:
Значения атрибутов тэга service берем из следующих мест:
- namespace — указываем пространство имен веб-сервиса (см. рисунок 3);
- name — указываем имя сервиса (см. рисунок 1);
- connectString — указывается расположение информационной базы (см. рисунок 4) + логин и пароль пользователя, от имени которого будет производиться авторизация. Для файлового варианта и клиент-серверного значение данного атрибута будет отличаться. Пример для клиент-серверного варианта: Srvr=»localhost»;Ref=»DemoSSL»;usr=»User»;pwd=»123456″
3. Пространство имен веб-сервиса |
4. Расположение информационной базы |
Теперь веб-сервис Exchange доступен без запроса авторизации по адресу http://192.168.0.85/DemoSSL/exchange.1cws. Обратите внимание, что изменился путь к веб-сервису, теперь он не содержит уровень ws.
UPD 15.03.2016:
Если стоит апач(а может и не только) — то по дефолту 1С пытается авторизовать пользователя системы вида: \\[DOMAIN]\HOSTNAME$, если в базе создать такого пользователя с авторизацией системы — то плясать с бубном не нужно, а дальше рулите ролями.
UPD 12.04.2017:
Создать в операционной системе пользователя, под ним настроить запуск Apache. В 1С завести пользователя, установить галку Аутентификация операционной системы и выбрать пользователя Apache. Правда при такой настройке не получится выборочной аутентификации — будут доступны все сервисы, связанные с WEB.
Нюансы настройки публикации web-сервиса 1С 8.2 в Apache и IIS
Возникла необходимость взаимодействовать с 1C с мобильного клиента под Windows Phone 7/8. Самым простым способом взаимодействия показалось работа через web сервисы, поддерживаемые 1С.
С точки зрения публикации web сервиса особых сложностей нет. Шаги подробно описаны в статьях:
Проблемы возникли с доступом к опубликованному web-сервису 1С. Под IIS 7.5 из под Windows 2008R2 после полудня танцев с бубном проблему решить не удалось. Были изучены статьи и ветки форумов:
но счастье так и не наступило.
В результате решил, что стоит попробовать поднять web сервис на Apache, поскольку с ним у меня обычно все было несколько проще с настройкой. Итак, на другом порту (8080) на том-же сервере был поднят Apache 2.2.22. В 1С был создан ещё один web сервис и опубликован уже на Apache. С настройками по умолчанию он также не заработал. Разберем ошибки.
Web сервис был опубликован в 1С под именем wsApache.
Публикация web-сервиса 1С под Apache
Соответственно, в указанном при публикации каталоге появился файл default.vrd следующего содержания:
В httpd.conf 1С добавила следующие строчки:
В целом, файлы/изменения создаваемые 1С почти рабочие. Теперь о проблемах.
Правильный линк на сервис
В некоторых статьях путь к web сервису указан как: http://имя_сервера:порт/имя_при_публикации/alias?wsdl.
- Имя сервера: s-1s-1-hw
- Порт: 8080
- Имя при публикации: wsApache
- Alias из файла default.vrd: service.1cws
Соответственно, НЕПРАВИЛЬНАЯ ссылка на web сервис 1С такая: http://s-1c-1-hw:8080/wsApache/service.1cws?wsdl
Если использовать такой линк, то 1C 8.2 выдаст сообщение вида:
Правильный вариант:
http://имя_сервера:порт/имя_при_публикации/ ws/ alias?wsdl.
Это обращение эквивалентно обращению по имени сервиса из default.vrd:
http://имя_сервера:порт/имя_при_публикации/ ws/ name?wsdl.
- Name из файла default.vrd: Service
Соответственно, ПРАВИЛЬНЫЙ линк для доступа к web сервису 1С будет такой:
http://s-1c-1-hw:8080/wsApache/ ws/ service.1cws?wsdl
http://s-1c-1-hw:8080/wsApache/ ws/ service?wsdl
Если указать ссылку с суффиксом ?wsdl, то в веб браузере отобразиться XML файл с описанием опубликованного сервиса.
Если указать ссылку без суффикса ?wsdl, то при правильной настройке должна появится страница с гиперссылкой на опубликованный сервис:
Авторизация пользователя при обращении к web сервису 1С
Если попытаться получить доступ к web сервису опубликованному под Apache не исправляя файл default.vrd, то появиться стандартный диалог авторизации:
Диалог авторизации на web сервисе 1С
В тестовой базе был заведен тестовый пользователь IUSR с полными правами с пустым паролем. Если ввести в диалог в качестве логина этого пользователя, то авторизация пройдет успешно и отобразиться либо XML файл, либо ссылка на него (см. выше).
Можно исключить запрос авторизационной информации вбив логин и пароль прямо в файл default.vrd, что, конечно, не рекомендуется с точки зрения безопасности, но иногда необходимо.
Это все. В моем случае каких-то дополнительных правок конфиг файлов не потребовалось.
В некоторых статьях указывалось, что нужно убрать из httpd.conf опцию «Options None«. У меня работает в обоих вариантах, т.е. когда строка присутствует и когда она удалена.
Публикация web сервиса 1С на IIS 7.5
Как уже упоминал выше, с публикацией web сервиса на IIS 7.5 с первого раза у меня не задалось, хотя тонкий клиент запускается без проблем. Поскольку пароль в конфигурационном файле по соображениям безопасности меня не устраивал, вернулся к вопросу настройки IIS. Был опубликован web сервис с именем wsIIS и именем сервиса ServiceIIS и alias-ом serviceIIS.1cws. Галка в чекбоксе «Использовать аутентификацию операционной системы на веб-сервере» для простоты эксперимента была снята.
Публикация web сервиса 1С в IIS 7.5.
Корректная ссылка в моем случае: http://s-1c-1-hw/wsIIS/ws/ServiceIIS?wsdl. При попытке зайти из Chrome/IE получаем ошибку возвращенную IIS:
Ошибка HTTP 401.2 — Unauthorized
дабы избавиться от ошибки правим web.config сформированный 1С следующим образом:
Эта правка эквивалента изменению через консоль управления IIS для нашего опубликованного приложения с именем wsIIS правил авторизации пользователя.
Настройки IIS 7.5 для доступа к web сервисам 1C
Добавление тегов security в web.config или правка правил авторизации в консоли IIS приводит к тому, что при обращении к сервису по указанной выше ссылке появляется запрос на авторизацию. Вводим нашего тестового пользователя IUSR без пароля и получаем нужный XML файл в ответе сервера.
Прописав в default.vrd логин и пароль пользователя, как было указано выше для Apache, уберем окно авторизации и сервис будет всегда авторизовываться под указанным пользователем. Как проходит авторизация можно посмотреть в логах 1C. Но вариант с прописыванием пользователя в конфигурационный файл — не наш путь, ибо не секьюрно.
Изменим настройки авторизации пользователя (в IIS проверка подлинности), чтобы использовалась Windows авторизация. Сменить можно в консоли управления IIS, либо в конфигурационном файле. Мне больше нравиться конфигурационный файл. так как проще переносить настройки при миграции на другой сервер.
Ваш браузер устарел, пожалуйста обновите ваш браузер пройдя по ссылке www.microsoft.com/download
Началось все с вопроса «А можно ли сделать так чтобы любой желающий мог получить доступ к нашему веб-клиенту, и для этого не нужно было бы всех заводить руками?». А дальше начались поиски решения) Задача стояла весьма увлекательная. Я, как человек мельком знакомый с веб-разработкой, и по основному профилю специализирующийся на разработке в 1С, видел свет в конце туннеля, но короткого пути не знал) Для решения моей задачи я обратился в интернет. Результатом поисков, проб и ошибок, стало такое решение.
Тестировалось все на
1. 1С 8.3.8 и 1С 8.3.13, но думаю будет работать и на других релизах 8.3
1. Универсальная форма для входа и регистрации в базе 1С. При логине пользователь не видит стандартного окна аутентификации 1С
2. Регистрация (создание пользователя) в 1С из веб формы. 1С создает пользователя и генерирует ему пароль.
3. Восстановление пароля пользователя 1С из веб-формы
4. При регистрации и восстановлении пароля пользователь получает письма с паролями
Для простоты разворачивания демонстрационной базы будем использовать Apache, великий и могучий. Он прост и понятен в настройке, для наших целей, это его главное преимущество перед всевозможными проблемами IIS.
Скачиваем Apache 2.4 для Windows. Той разрядности которой у вас 1С. И скачиваем PHP любой версии 5.5 и старше, не знаю точно какие есть ограничения в этом плане, но лучше не рискуйте. Возможно в каких-то версиях не будет модуля для apache2_4 в комплекте.
После скачивания всего этого добра распаковываем все архивы куда ни будь поближе к корню диска. чтобы долго не писать пути в консоли.
В архиве с Apache можно найти файл Readme. В котором описан весь незатейливый процесс установки веб-сервера. Основное что нам нужно сделать:
1. Заходим в папку с апачем, например C:\Apache24\conf\ и находим файл httpd.conf
2. В нем нам нужно изменить строку Define SRVROOT «c:/Apache24» если путь к корневой папке Апача отличается от вышеуказанного, и поменять на правильный. Обратите внимание на направление слешей.
3.Далее, определите папку в которой будут лежать ваши веб-публикации по умолчанию она c:/Apache24/htdocs
4. Далее нам необходимо подключить php к нашему веб-серверу. Тут все достаточно просто в том же конфигурационном файле мы найдем конец блока инструкции «LoadModule» и после него укажем такие строки
AddHandler application/x-httpd-php .php
AddType application/x-httpd-php .php .html
PHPIniDir «C:/php/php5.6»
LoadModule php5_module «C:/php/php5.6/php5apache2_4.dll»
Пути естественно указываем те, где распакован php. Обращаем внимание на слеши. В зависимости от версии строки подключения могут меняться, проверяйте способ подключения в интернете. Немного поясню. Две первые строки это назначение обработчика расширений файлов сайта а две последние путь к файлам модуля.
5. Далее, все в том же конфигурационном файле находим блок
DirectoryIndex index.html
И добавляем сюда новый тип индексного файла. index.php, чтобы стало вот так
DirectoryIndex index.html index.php
Этим самым мы укажем нашему серверу, что главный файл сайта, точка входа, может называться и index.php.
На этом редактирование конфигурации apache руками заканчивается, сохраняем файл.
6. Переходим в директорию установки php и находим там файл «php.ini-development», копируем его и переименовываем в php.ini. Это будет наш конфигурационный файл php, настроек в нем достаточно чтобы все что нам нужно взлетело потому приступаем к самому интересному
7. Для того чтобы у нас появилась возможность публиковать веб-клиент из 1С и открывать сайты на нашем локалхосте нам нужно установить службу веб-сервера Apache, это мы сделаем перейдя в консоль под админскими правами. Перейдем в директорию Apache\bin и запустим приложение httpd.exe с ключами -k install
cd C:\Apache24\bin\
httpd.exe -k install
После этого по экрану побегут строки, для нас главное увидеть, что везде написано Success и не написано Error. Как правило установка сервиса проходит успешно, и ошибки в основном происходят в момент ее тестового запуска. Если увидели ошибки, то как правило все они хорошо гуглятся и быстро решаются.
После того как установка прошла успешно желательно зайти в папку Apache\bin в проводнике и запустить ApacheMonitor. Для того чтобы в трее появился интерфейс быстрого управления службой Apache.
Заходим в браузере по адресу http://localhost если написано «It work’s» значит все в порядке.
Для того чтобы потом удалить Apache нужно тоже зайти в консоль, выполнить то же самое. но с ключом -k uninstall
8. После установки Apache нужно установить модуль расширения web-сервера 1С. Для этого зайдите в список установленных приложений, выберите 1С, и нажмите «Изменить», после в диалоге установки выберите в списке прочего «Модуль расширения web-сервиса»
9. Установка окружения завершена. Остался только сам процесс публикации, который выполняется в пару кликов. Описывать не буду, надеюсь рядовой одинесник без труда с этим разберется. на этом все.
Архитектура решения такова:
1.Index.php — файл с веб-формой. Версткой, незатейливым дизайном и скриптами визуального отображения.
Весь листинг приводить не буду, он здесь не будет смотреться. Но основная идея для подмены формы логина в веб-клиенте 1С описана по ссылке и реализуется с помощью простой формы с POST запросом.
Нам остается только подставить правильный адрес в атрибут action нашей формы. И готово.
С остальными функциями веб-формы логина все не так просто.
2. backend.php — Файл содержащий обработчики формы для регистрации и восстановления пароля и соединяется с 1С по http-сервису. Основная суть вызова http-сервиса 1С из php сводится к коду
Хочется переделать на CURL для расширенной работы с ответом веб-сервиса, и переделать вызовы на AJAX. Но пока так.
3. Следующим по очереди идет файл config.php в папке assets, в нем указаны конфигурационные данные для подключения к нашему веб-сервису. код прост и незатейлив. Но сильно упрощает подключение.
из этого файла выбираются параметры для всех операций
4. и style.css, но это не так интересно. Стили здесь не главное.
Дальше переходим к стороне 1С.
Здесь у нас все довольно прозаично. Конфигурация содержит http-сервис «Пользователи» с двумя шаблонами
/register и /resetPassword
Оба шаблона содержат POST-методы и устроены однообразно
Листинг функции регистрации в упрощенном виде выглядит так
Листинг функции восстановления пароля устроен подобным образом
Для тех кто станет это скачивать и пробовать. Нужно сделать следующее
1. .Заполнить параметры подключения к почтовому серверу в процедуре ПочтовыйПрофиль(), тогда почта начнет отправляться.
2. Кладем файлы веб-формы в папку htdocs сервера если у вас Apache.
3. Заполняем файл config.php в папке assets
Вроде бы все. Ожидаю ваши комментарии, исправления и советы.