> ## Documentation Index
> Fetch the complete documentation index at: https://docs.1unic.com/odatav4/llms.txt
> Use this file to discover all available pages before exploring further.

# Публикация токенов

> Отдельная публикация сервиса odatat для доступа по токенам: Power BI, Excel, браузерные клиенты

Токен позволяет подключать отчёты и интеграции без пароля пользователя 1С. Сервис токенов `OData4T`
(`/hs/odatat/v4/`) работает на **отдельной публикации** базы, где веб-сервер входит в базу под фиксированным
служебным пользователем, а расширение проверяет токен и применяет [профиль](/odatav4/security/profiles) токена.

## 1. Служебный пользователь

Создайте пользователя информационной базы, например `odata-svc`, и назначьте ему:

* роль расширения `OData4_СлужебныйПользователь`;
* роли конфигурации на чтение (и, если нужно, запись) объектов, которые будут доступны по токенам.
  В конфигурациях на БСП служебной учётке для записи нужна и базовая роль (`БазовыеПраваБСП` или аналог), а
  в справочнике «Пользователи» — её элемент.

Что именно служебный пользователь может видеть, задаёт настройка «Права служебного пользователя» (вкладка
«Аутентификация»):

| Режим | Как работает |
| - | - |
| **Роли конфигурации** (по умолчанию, рекомендуется) | права дают роли конфигурации, назначенные служебному пользователю; RLS действует |
| **Привилегированный** | чтение и запись в привилегированном режиме: доступ определяет только профиль токена, RLS не действует. Требует расширения без безопасного режима |
| **Роли расширения** | права из служебного расширения `OData4Права` на объекты состава. Генератор этого расширения будет опубликован позже |

## 2. Публикация

Опубликуйте базу второй раз, например под именем `base-svc`, с входом под служебным пользователем
(`usr` и `pwd` в `default.vrd`) и публикуйте на ней **только** сервис токенов:

```xml default.vrd theme={null}
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
       base="/base-svc"
       ib="Srvr=&quot;server&quot;;Ref=&quot;base&quot;;Usr=&quot;odata-svc&quot;;Pwd=&quot;пароль&quot;;">
  <httpServices publishByDefault="false" publishExtensionsByDefault="false">
    <service name="OData4T" rootUrl="odatat" enable="true"
             reuseSessions="autouse" sessionMaxAge="20"
             poolSize="10" poolTimeout="5"/>
  </httpServices>
</point>
```

<Warning>
  Публикация с фиксированным пользователем отдаёт **без аутентификации** все опубликованные на ней
  HTTP-сервисы. Поэтому выключите `publishByDefault` и `publishExtensionsByDefault` и перечислите только
  `OData4T`. Ограничьте права на чтение `default.vrd`: в нём пароль служебного пользователя.
</Warning>

Защита действует и без этого: сервис `odata` принимает только запрос, аутентифицированный Basic текущего
пользователя, а служебной учётке вход по Basic запрещён (`403`, настройка «Разрешить Basic служебным
учёткам», по умолчанию выключена).

Проверка:

```bash theme={null}
curl -i https://server/base-svc/hs/odatat/v4/
# 401 «Нет токена доступа» — публикация работает
```

## 3. Токен

Выпустите токен в форме «Настройки OData4» на вкладке **«Токены»** и выполните запрос:

```bash theme={null}
curl -H "X-OData4-Token: o4_…" https://server/base-svc/hs/odatat/v4/Catalog_Номенклатура?\$top=5
```

Способы передачи токена, срок действия, отзыв и ограничение по IP — на странице [Токены](/odatav4/security/tokens).

## Адрес клиента за прокси

Ограничение токена по IP проверяется по адресу, который ставит доверенный прокси: сервис не видит адреса
соединения. Без доверенного заголовка токен с разрешёнными IP **отвергается** (`401`).

В настройках (вкладка «Аутентификация») задайте:

* **Заголовок адреса клиента** — `X-Forwarded-For` или `X-Real-IP`;
* **Доверять заголовку адреса клиента** — включено;
* **Число доверенных прокси** — сколько прокси стоит перед веб-сервером 1С (по умолчанию 1).

Адрес берётся из `X-Forwarded-For` **справа**: каждый прокси дописывает в конец адрес, с которого к нему пришли,
а всё левее присылает клиент и может подделать. При числе прокси N адрес клиента — N-й адрес справа.

<CodeGroup>
  ```nginx nginx theme={null}
  location /base-svc/ {
      proxy_pass http://1c-web:80;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
  ```

  ```apache Apache без прокси theme={null}
  # в разделе публикации токенов: веб-сервер сам перезаписывает заголовок (N = 1)
  RequestHeader set X-Forwarded-For "expr=%{REMOTE_ADDR}"
  ```
</CodeGroup>

Без внешнего прокси веб-модуль 1С ставит `X-Forwarded-For` сам, только если клиент его не прислал, поэтому
веб-сервер должен перезаписывать заголовок, как в примере для Apache.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.