Перейти к основному содержимому

Публичные методы API (вторая публикация)

Часть методов REST API должна работать без входа пользователя: пользователь, забывший пароль, ещё не может войти. Это методы восстановления пароля и список логинов для страницы входа. Платформа проверяет логин и пароль раньше, чем начинает выполняться код 1С, поэтому «анонимного» адреса внутри основной публикации быть не может. Для таких методов создаётся вторая публикация той же информационной базы: в её строке подключения указан служебный пользователь с единственной ролью.

Принцип тот же, что в статье Установка оценок по заданию в личном кабинете: вторая публикация, в которой включён только нужный HTTP-сервис и прописан служебный пользователь.

Что доступно через вторую публикацию​

Базовый адрес публичных методов:

<адрес второй публикации>/hs/api_public/v2/

Через вторую публикацию доступны только три маршрута:

МетодАдресНазначение
POST/v2/password-recovery-codeЗапросить код восстановления пароля на электронную почту
POST/v2/password-recovery-confirmУстановить новый пароль по коду из письма
GET/v2/login-usersПолучить список логинов для страницы входа

Любые другие адреса и методы, а также запросы с параметрами в строке адреса (?...) получают ответ 404 без тела. Это ограничение действует независимо от прав служебного пользователя. Описание самих методов — в статье Публичные методы входа и восстановления пароля.

Выключатели в настройках ЛК

Методы восстановления пароля и список логинов по умолчанию выключены и включаются отдельными флажками в настройках личного кабинета. Подробнее — в статье Настройка восстановления пароля в личном кабинете.

Предварительные настройки​

Прежде чем создавать вторую публикацию, убедитесь, что:

Инструкция​

Шаг 1: создайте служебного пользователя с единственной ролью​

Служебный пользователь нужен только публикации: клиенты ЛК под ним не работают и пароль не вводят. Вся его «сила» — единственная роль Публичные методы API (ПубличныеМетодыAPI): она даёт право вызывать публичный HTTP-сервис APIПубличный и ничего больше.

  1. Создайте профиль группы доступа.

    Путь: Администрирование → Настройки пользователей и прав → Профили групп доступа

    Назовите профиль, например, «Публичные методы API» и добавьте в него единственную роль — Публичные методы API.

  2. Создайте группу доступа с этим профилем.

    Путь: Администрирование → Настройки пользователей и прав → Группы доступа

  3. Создайте пользователя, например ApiPublic: включите флажок Аутентификация 1С:Предприятия и задайте надёжный пароль. Добавьте пользователя в созданную группу доступа. В примере файла публикации ниже указано условное значение пароля.

  4. В карточке пользователя снимите флажок Показывать в списке выбора: служебной учётной записи не место в списке логинов страницы входа.

  5. Проверьте права пользователя: других ролей быть не должно. Публичные методы выполняются с правами служебного пользователя, поэтому каждая лишняя роль (например, Полные права или Базовые права API) ослабляет защиту второй публикации, которая открыта без входа.

Подробнее о создании профилей, групп и пользователей — в статье Создание групп и профилей доступа.

Шаг 2: создайте вторую публикацию на веб-сервере​

Ниже в примерах вторая публикация называется it-public, а основная — itdemo. Подставьте свои имена и пути.

Веб-сервер Apache​

  1. Откройте файл httpd.conf (в XAMPP — C:\xampp\apache\conf\httpd.conf), найдите блок публикации основной базы и скопируйте его ниже:

    # 1c publication
    Alias "/itdemo" "D:/www/ITDemo/"
    <Directory "D:/www/ITDemo/">
    AllowOverride All
    Options None
    Order allow,deny
    Allow from all
    SetHandler 1c-application
    ManagedApplicationDescriptor "D:/www/ITDemo/default.vrd"
    </Directory>
  2. В копии замените имя публикации и пути:

    # 1c publication public
    Alias "/it-public" "D:/www/ITPublic/"
    <Directory "D:/www/ITPublic/">
    AllowOverride All
    Options None
    Order allow,deny
    Allow from all
    SetHandler 1c-application
    ManagedApplicationDescriptor "D:/www/ITPublic/default.vrd"
    </Directory>
  3. Создайте каталог D:\www\ITPublic и скопируйте в него файл 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="/it-public"
    ib="File=&quot;D:\Рабочие базы\IT_Демо&quot;;Usr=&quot;ApiPublic&quot;;Pwd=&quot;ПарольСлужебногоПользователя&quot;;">

    <httpServices>
    <service name="APIПубличный"
    rootUrl="api_public"
    enable="true"/>
    </httpServices>
    </point>

    Для серверной базы строка подключения выглядит так:

    ib="Srvr=&quot;АДРЕС_СЕРВЕРА&quot;;Ref=&quot;НАЗВАНИЕ_БАЗЫ&quot;;Usr=&quot;ApiPublic&quot;;Pwd=&quot;ПарольСлужебногоПользователя&quot;;"
  4. Перезапустите Apache.

Веб-сервер IIS​

  1. В каталоге c:\inetpub\wwwroot\ создайте каталог it-public и скопируйте в него файлы default.vrd и web.config из каталога основной публикации.
  2. Приведите default.vrd к виду, показанному выше для Apache: в base укажите /it-public, в строку подключения добавьте служебного пользователя, в httpServices оставьте единственный сервис APIПубличный с rootUrl="api_public".
  3. Настройте доступ учётной записи пула приложений к файлам публикации с учётом конфигурации вашего IIS. Не выдавайте полные права на каталог по умолчанию: содержащий пароль default.vrd должен быть защищён от изменения посторонними пользователями.
  4. В «Диспетчере служб IIS» раскройте ветку «Default Web Site», в контекстном меню папки it-public выберите «Преобразовать в приложение» — так же, как показано в статье Установка оценок по заданию в личном кабинете.
  5. Перезапустите веб-сервер.
Что нельзя переносить в файл второй публикации

Во второй публикации должен быть опубликован только сервис APIПубличный. Блок веб-сервисов <ws>, остальные HTTP-сервисы и стандартный интерфейс OData переносить не нужно: вторая публикация открыта без входа, и каждый лишний сервис расширяет возможности анонимных клиентов.

Шаг 3: проверьте публикацию​

Подставьте свой адрес вместо https://server/it-public.

  1. Проверьте, что закрыто всё лишнее. Запрос GET https://server/it-public/hs/api_public/v2/echo должен вернуть 404 без тела.

  2. Проверьте список логинов. Запрос GET https://server/it-public/hs/api_public/v2/login-users вернёт [] — пока выключатель Показывать список логинов через API выключен или подходящих пользователей нет.

  3. Проверьте восстановление пароля:

    curl -X POST "https://server/it-public/hs/api_public/v2/password-recovery-code" \
    -H "Content-Type: application/json" \
    -d '{"login_or_email": "ivanov"}'

    Пока выключатель Разрешить восстановление пароля через API выключен, ответом будет 400 с кодом ошибки ВосстановлениеПароля.Отключено. Когда выключатель включён, ответ — 201 и пустой объект {} независимо от того, существует ли пользователь.

Шаг 4: включите выключатели в настройках ЛК​

Путь: Администрирование → Сервис → Настройки параметров учета → Личный кабинет

Включите нужные флажки (Разрешить восстановление пароля через API, Показывать список логинов через API) и нажмите Применить. Здесь же ссылка Настройки восстановления паролей открывает штатную форму параметров кода и письма. Подробности и предупреждения — в статье Настройка восстановления пароля в личном кабинете.

Настройки веб-части ЛК

Здесь описана только публикация на стороне 1С. Какие настройки веб-части ЛК нужны для обращения ко второй публикации, смотрите в документации к обновлению веб-части личного кабинета.

Рекомендации по безопасности​

  • Ограничьте частоту запросов к адресам /hs/api_public/* на веб-сервере или обратном прокси, например по числу запросов в минуту с одного IP-адреса. Методы вызываются без входа, и программа не ограничивает число обращений с одного адреса: она лишь не позволяет получать код для одного пользователя чаще заданного интервала.
  • Публикуйте по HTTPS. По второй публикации передаются пароли и коды подтверждения.
  • Защитите файл default.vrd: в нём в открытом виде записан пароль служебного пользователя, поэтому право на чтение каталога публикации должно быть только у служебных учётных записей веб-сервера и администраторов.
  • Не расширяйте роль служебного пользователя и не используйте эту учётную запись для других целей.
  • Основная публикация (/hs/api/v2/) остаётся только для авторизованных пользователей. Те же методы там тоже доступны, но под обычной проверкой логина и пароля.

Если что-то не работает​

Что происходитВозможная причинаЧто сделать
Все запросы, включая три разрешённых, возвращают 404Сервис не опубликован: в default.vrd нет блока httpServices, имя сервиса не APIПубличный, rootUrl не api_public, или веб-сервер не перезапущенСверьте файл с примером выше и перезапустите веб-сервер
404 только для нужного методаНеточный адрес или HTTP-метод, лишний слеш, в адрес добавлены параметры (?...)Используйте точные адреса из таблицы выше без параметров
Ошибка аутентификации при обращении к публикацииВ ib неверный логин или пароль служебного пользователяПроверьте значения Usr и Pwd
Сообщение об отсутствии прав на сервисСлужебный пользователь не добавлен в группу доступа с ролью Публичные методы APIПроверьте профиль, группу доступа и участие пользователя в ней
400 с кодом ВосстановлениеПароля.ОтключеноВыключатель восстановления в настройках ЛК выключенВключите его, см. шаг 4
Пустой список логинов []Выключатель списка выключен, нет подходящих пользователей либо более 300 пользователей ИБ имеют флажок списка и стандартную аутентификацию (до остальных отборов)См. Настройка восстановления пароля в личном кабинете