
При внедрении единой системы аутентификации в компании я столкнулся с задачей организовать 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. Привязка провайдера к приложению
-
Перейдите в раздел Applications → Create

Укажите:
-
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="sirena";Ref="CRM";"> <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.<ваш-домен>/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
-
В поле Имя укажите email — он должен совпадать с email, передаваемым провайдером (см. authenticationClaimName = «email» в default.vrd).
-
Установите галочку Аутентификация 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/
Добавить комментарий