Поиск по блогу

четверг, 18 июня 2015 г.

Убираем авторизацию пользователя у веб-сервиса

Механизм Web-сервисов позволяет использовать 1С:Предприятие 8 как набор сервисов в сложных распределенных и гетерогенных системах, а также позволяет интегрировать 1С:Предприятие 8 с другими промышленными системами использованием сервисно-ориентированной архитектуры.

Публикация веб-сервисов выполняется через конфигуратор, для этого нужно открыть окно Публикация на веб-сервере, нажав Администрирование -> Публикация на веб-сервере...
1. Опубликованный веб-клиент и веб-сервисы
Процесс публикации описывать не буду, для каждого случая он свой, но обычно достаточно выбрать веб-сервер, указать каталог публикации и нажать на кнопку Опубликовать.

Послу публикации в указанном каталоге создастся файл default.vrd. Его содержимое будет примерно таким:
<?xml version="1.0" encoding="UTF-8"?>
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
base="/DemoSSL"
ib="File=&quot;C:\1с\БиблиотекаСтандартныхПодсистем\DemoSSL&quot;;">
<ws>
<point name="Exchange"
alias="exchange.1cws"
enable="true"/>

<point name="Exchange_2_0_1_6"
alias="exchange_2_0_1_6.1cws"
enable="true"/>
<point name="InterfaceVersion"
alias="InterfaceVersion.1cws"
enable="true"/>
<point name="MessageExchange"
alias="messageexchange.1cws"
enable="true"/>
<point name="MessageExchange_2_0_1_6"
alias="messageexchange_2_0_1_6.1cws"
enable="true"/>
<point name="RemoteAdministrationOfExchange"
alias="RemoteAdministrationOfExchange.1cws"
enable="true"/>
<point name="RemoteAdministrationOfExchange_2_0_1_6"
alias="RemoteAdministrationOfExchange_2_0_1_6.1cws"
enable="true"/>
</ws>
</point>


Тег ws содержит описание публикации веб-сервисов. Если мы обратимся к веб-сервису с помощью браузера, введя его адрес, например, http://192.168.0.85/DemoSSL/ws/exchange.1cws, то увидим окно авторизации, которое попросит ввести логи и пароль пользователя 1С:
2. Окно авторизации веб-сервиса
Обратите внимание, адрес к веб-сервису строится по следующему шаблону:
[СетевойАдресКомпьютера]/[ИмяПубликации]/ws/[АдресВебСервиса]

Создадим пользователя 1С с логином User и паролем 123456, от имени которого в дальнейшем будет происходить автоматическая авторизация.
Замечено, окно авторизации корректно работает с логином, написанным на латинице, иначе может появится ошибка:
<html>
<head><title> A server error occurred. </title></head>
<h1> а?б?б?аЕаНб?аИб?аИаКаАб?аИб? аПаОаЛб?аЗаОаВаАб?аЕаЛб? аНаЕ аВб?аПаОаЛаНаЕаНаА.   </h1>
<hr/>
An error occurred processing this request.</html>


Допустим, необходимо, что бы веб-сервис exchange.1cws не требовал авторизацию. Для этого из файла default.vrd удаляем информацию о данном веб-сервисе, то есть удаляем строчки:
<point name="Exchange"
alias="exchange.1cws"
enable="true"/>

Создаем рядом с файлом default.vrd файл с именем exchange и расширением 1cws (exchange.1cws). Откроем файл текстовым редактором, укажем кодировку UTF-8 без BOM и запишем следующие строчки:
<?xml version="1.0" encoding="UTF-8"?>
<service
namespace="http://www.1c.ru/SSL/Exchange"
name="Exchange"
connectString="File=&quot;C:\1с\БиблиотекаСтандартныхПодсистем\DemoSSL&quot;;usr=&quot;User&quot;;pwd=&quot;123456&quot;"/>

Значения атрибутов тэга service берем из следующих мест:
  • namespace - указываем пространство имен веб-сервиса (см. рисунок 3);
  • name - указываем имя сервиса (см. рисунок 1);
  • connectString - указывается расположение информационной базы (см. рисунок 4) + логин и пароль пользователя, от имени которого будет производиться авторизация. Для файлового варианта и клиент-серверного значение данного атрибута будет отличаться. Пример для клиент-серверного варианта: Srvr=&quot;localhost&quot;;Ref=&quot;DemoSSL&quot;;usr=&quot;User&quot;;pwd=&quot;123456&quot;
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.

9 комментариев:

  1. Если стоит апач(а может и не только) — то по дефолту 1С пытается авторизовать пользователя системы вида: \\[DOMAIN]\HOSTNAME$, если в базе создать такого пользователя с авторизацией системы — то плясать с бубном не нужно, а дальше рулите ролями ;-)

    ОтветитьУдалить
  2. Отличная статья! А при работе с HTTP-сервисом, как уйти от авторизации???

    ОтветитьУдалить
    Ответы
    1. Сейчас не работаю в данном направлении, ответить на ваш вопрос не имею возможности.

      Удалить
    2. просто в строку в коце добавить по аналогии

      ib="File="C:\Users\user\Desktop\1С\АВТОМАТ ОФИКИ\1Cv8Log";usr="Admin";pwd="123456""

      usr="Admin";pwd="123456"

      Admin - это логин
      123456 - это пароль

      Удалить
  3. Создать в операционке пользователя, под ним настроить запуск Apache. В 1С завести пользователя, установить галку Аутентификация операционной системы и выбрать пользователя Apache... Правда при такой настройке не получится выборочной аутентификации - будут доступны все сервисы, связанные с WEB...

    ОтветитьУдалить