Мой опыт настройки SSO OpenID Connect в 1С с помощью Authentik

от автора

При внедрении единой системы аутентификации в компании я столкнулся с задачей организовать SSO-доступ к 1С через протокол OpenID Connect. За основу я взял статью на InfoStart (https://infostart.ru/1c/articles/1538390/), однако в качестве провайдера аутентификации использовал не Keycloak, как в оригинале, а Authentik — современную и удобную альтернативу с простым UI и богатым функционалом.

➡️ Вводные

  • Сервер 1С 8.3.25.1394 под Windows Server

  • Authentik 2025.2.1

  • Nginx как обратный прокси

🔐 Настройка OAuth2/OpenID провайдера для 1С в Authentik

1. Создание нового провайдера

  • Перейдите в раздел Applications → Providers и нажмите кнопку Create.

  • Выберите тип OAuth2/OpenID Provider и нажмите Next.

  • Откроется окно создания провайдера, ClientID и Client Secret сгенерируются автоматически

2. Основные параметры провайдера

  • Name: Provider for 1c-enterprise-CRM

  • Authorization Flow: default-provider-authorization-implicit-consent

  • Client Type: Confidential

  • Redirect URI: strict: https://apps.<ваш-домен>/CRM/authform.html где https://domain.tld — адрес, по которому доступна веб-публикация 1С, CRM имя базы 1С.

  • Установите Signing Key — можно использовать self-signed сертификат.

3. Параметры токенов, Scopes и subject mode

По умолчанию:

  • Access code validity: minutes=1

  • Access token validity: minutes=5

  • Refresh token validity: days=30

  • В Scopes переместите нужные значения в правую колонку:

    • authentikdefault OAuth Mapping OpenID ’email’

    • authentikdefault OAuth Mapping OpenID ‘openid’

    • authentikdefault OAuth Mapping OpenID ‘profile’

  • Subject mode: Based on the User’s hashed ID

  • Включите Include claims in id_token

  • Оставьте Issuer mode: Each provider has a different issuer

4. Привязка провайдера к приложению

  • Перейдите в раздел ApplicationsCreate

Укажите:

  • Name: 1C CRM — имя приложения (можно любое), будет отображаться в пользовательском интерфейсе

  • Slug: 1c-crm — условно id приложения, должно быть уникальным

  • Provider: Provider for 1c-enterprise-CRM — выбираем провайдера, которого указали ранее

  • Launch URL: https://apps.<ваш-домен>/CRM/ — url для запуска приложения из пользовательского интерфейса

  • Open in new tab — включено — по удобству, будет открывать 1С в новой вкладке браузера

  • Icon: загрузите логотип 1С

5. Проверка отображения

  • Войдите в User interface.

  • Убедитесь, что приложение 1C CRM отображается в списке доступных пользователю.

6. Проверка итоговой конфигурации провайдера

Откройте созданного провайдера

Authentik покажет сгенерированные:

  • OpenID Configuration URL

  • Authorize URL

  • Token URL

  • Userinfo URL

  • Logout URL

  • JWKS URL Теперь эти настройки можно использовать для авторизации в 1С

🛠 Настройка default.vrd для подключения OpenID (Authentik) в 1С

Для интеграции 1С с Authentik по протоколу OpenID Connect необходимо отредактировать файл default.vrd, который создаётся автоматически при публикации базы данных 1С на веб-сервере.

📁 Где находится файл

Файл располагается в папке опубликованной базы. Пример пути на сервере Windows:

C:\Apache24\htdocs\1C\CRM\default.vrd
  • CRM — имя опубликованной базы.

  • htdocs\1C\CRM — путь, заданный при публикации через веб-сервер 1С.

🔧 Что нужно сделать

Добавить секцию <openidconnect> в файл default.vrd. Эта секция определяет параметры авторизации через внешнего OpenID-провайдера — в нашем случае, Authentik.

📄 Пример содержимого с OpenID-провайдером

<?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="/CRM" ib="Srvr=&quot;sirena&quot;;Ref=&quot;CRM&quot;;"> <ws pointEnableCommon="true" publishExtensionsByDefault="true"> <standardOdata enable="true" reuseSessions="autouse" sessionMaxAge="20" poolSize="10" poolTimeout="5"/> <analytics enable="true"/> <openidconnect> <providers> <![CDATA[[ { "name": "authentik", "title": "authentik", "discovery": "https://auth.<ваш-домен>/application/o/1c-crm/.well-known/openid-configuration", "authenticationClaimName": "email", "authenticationUserPropertyName": "name", "clientconfig": { "authority": "https://auth.<ваш-домен>/application/o/1c-crm/", "client_id": "", "client_secret": "", "redirect_uri": "https://apps.<ваш-домен>/CRM/authform.html", "response_type": "id_token token", "scope": "email openid", "filterProtocolClaims": true, "loadUserInfo": false } } ]]]> </providers> <allowStandardAuthentication>true</allowStandardAuthentication> </openidconnect> </ws> </point>
Описание параметров OpenID-провайдера в `default.vrd`
"name": "authenti
  • Описание: Внутреннее имя провайдера (служебное, не отображается пользователю).

  • Значение: Любое уникальное строковое значение, желательно без пробелов.

  • Пример: «authentik»

"title": "authentik"
  • Описание: Отображаемое имя провайдера на странице входа 1С.

  • Значение: Видимое название кнопки авторизации.

  • Пример: «authentik» или «Войти через корпоративную учётку»

"discovery": "https://auth.<ваш-домен>/application/o/1c-crm/.well-known/openid-configuration"
  • Описание: URL для автоматического получения метаданных OpenID провайдера (endpoints, scopes и пр.).

  • Значение: Должен вести на endpoint .well-known/openid-configuration, соответствующий выбранному приложению.

  • Пример: https://auth.big-business.tld/application/o/1c-crm/.well-known/openid-configuration

"authenticationClaimName": "email"
  • Описание: Название claim’а в ID-токене, который будет использоваться для идентификации пользователя.

  • Значение: Должен совпадать с ключом в ID-токене (email, sub, preferred_username, и т.п.)

  • Важно: Значение должно быть уникальным в системе 1С (обычно email или sub).

"authenticationUserPropertyName": "name"
  • Описание: Свойство, в которое будет подставляться имя пользователя в интерфейсе 1С.

  • Значение: Должно совпадать с claim’ом, содержащим имя (name, given_name, fullname и т.п.).

"authority": "https://auth.<ваш-домен>/application/o/1c-crm/"
  • Описание: Базовый URL-адрес OpenID-провайдера.

  • Значение: Совпадает с частью до .well-known/openid-configuration.

"client_id": ""
  • Описание: Идентификатор клиента, полученный в Authentik.

  • Где взять: Указывается при создании OAuth2-провайдера в Authentik.

"client_secret": ""
  • Описание: Секрет клиента — аналог пароля, полученный в Authentik.

  • Важно: Не публикуйте и не передавайте третьим лицам.

"redirect_uri": "https://apps.&lt;ваш-домен&gt;/CRM/authform.html"
  • Описание: URI, куда будет перенаправлён пользователь после авторизации.

  • Важно: Должен совпадать с URI, указанным в настройках OAuth2-приложения в Authentik.

"response_type": "id_token token"
  • Описание: Тип ответа от провайдера.

  • Значение: Используется для Implicit Flow (получение токенов прямо в браузере без серверной обработки).

  • Пример: «id_token token»

"scope": "email openid"
  • Описание: Запрашиваемые разрешения (scopes) на доступ к данным пользователя.

"filterProtocolClaims": true
  • Описание: Удаляет служебные OpenID-поля из результата (iss, aud, iat, и т.п.).

  • Значение: true — рекомендуется включить для чистоты данных.

"loadUserInfo": false
  • Описание: Определяет, будет ли клиент дополнительно запрашивать /userinfo endpoint.

  • Значение: false — достаточно информации из ID-токена. Если нужно больше данных — можно установить true.

<allowStandardAuthentication>true</allowStandardAuthentication>
  • Описание: Разрешает использование обычной авторизации 1С (логин/пароль) наряду с OpenID.

  • Значение:

    • true — пользователь может выбрать метод входа.

    • false — вход только через OpenID.

👤 Настройка пользователя в 1С для OpenID Connect

  1. В поле Имя укажите email — он должен совпадать с email, передаваемым провайдером (см. authenticationClaimName = «email» в default.vrd).

  2. Установите галочку Аутентификация OpenID Connect.

👨‍💻 Особенности работы (браузер/тонкий клиент)

🌐 В браузере

В браузере все работает отлично:

🖥️ Тонкий клиент

Важно отметить один нюанс, тонкий клиент 1С открывает свое окно для отображения страницы входа SSO провайдера.

  • В Windows (тестировал на 10 и 11) не отображается интерфейс провайдера, просто белый фон.

  • В Linux (Fedora 41 Gnome) все работает отлично (вход через WebAuth естественно не работает, нужно использовать TOTP в качестве второго фактора)

🔚 Заключение

В браузере работа SSO проходит безупречно, включая полноценную поддержку второго фактора. В частности, можно использовать WebAuthn-авторизацию с помощью Passkey или аппаратных ключей, таких как YubiKey. Это обеспечивает высокий уровень безопасности без потери удобства.

Однако при работе через тонкий клиент 1С на Windows остаётся проблема: вместо браузера по умолчанию используется встроенное окно, которое в текущей версии не отображает интерфейс авторизации корректно (остаётся белый экран).

В данный момент я нахожусь в поиске решения, которое позволит запускать процесс аутентификации в системном браузере, минуя встроенное окно. Это улучшило бы пользовательский опыт и обеспечило стабильную работу SSO вне зависимости от платформы.

Если вы планируете внедрение единой системы входа для корпоративных сервисов, рекомендую обратить внимание на Authentik как простое и мощное решение. А при интеграции с 1С — не бойтесь экспериментировать: всё возможно при правильной настройке.

Благодарю за внимание.


ссылка на оригинал статьи https://habr.com/ru/articles/895294/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *