Аутентификация через OpenID Connect (OIDC) в 1С:Предприятие становится всё более востребованной среди компаний, стремящихся централизовать управление доступом пользователей. Этот протокол, построенный поверх OAuth 2.0, позволяет делегировать проверку подлинности сторонним сервисам (например, Keycloak, Azure Active Directory или Yandex ID), избавляя от необходимости хранить пароли в базе 1С. Но как именно работает эта технология в экосистеме 1С? Какие механизмы поддерживаются платформой "из коробки", а где потребуется доработка?
В этой статье мы разберём уникальную особенность интеграции OpenID Connect с 1С: возможность использования стандартного HTTP-сервиса платформы для валидации токенов без написания кода на C# или Java. Вы узнаете, как настроить аутентификацию через популярные провайдеры, какие ошибки возникают чаще всего (и как их исправить), а также получите готовые примеры кода для типичных сценариев. Материал будет полезен администраторам 1С, разработчикам и архитекторам систем, планирующим переход на современные протоколы аутентификации.
Что такое OpenID Connect и почему он нужен в 1С
OpenID Connect (OIDC) — это открытый стандарт аутентификации, который добавляет к протоколу OAuth 2.0 слой идентификации пользователей. В отличие от классического OAuth (где сервис получает только права доступа), OIDC возвращает ID_token — JWT-токен с данными о пользователе (имя, email, роли и т.д.). Это позволяет:
- 🔐 Централизовать управление учётными записями — все пароли хранятся в одном месте (например, в Active Directory или Okta), а 1С только проверяет токены.
- 🔄 Упростить SSO (Single Sign-On) — пользователь входит один раз в корпоративный портал и автоматически получает доступ к 1С без повторного ввода логина/пароля.
- 🛡️ Повысить безопасность — поддержка многофакторной аутентификации (MFA), короткое время жизни токенов, защита от CSRF-атак.
- 📱 Интегрироваться с мобильными приложениями — OIDC оптимизирован для работы с native-клиентами (в отличие от Basic Auth).
В контексте 1С:Предприятие OpenID Connect решает две ключевые проблемы:
- Отсутствие встроенной поддержки современных протоколов аутентификации (до версии 8.3.20 включительно).
- Сложность синхронизации пользователей между 1С и внешними системами (например, при использовании LDAP требуется ручное сопоставление ролей).
С 2021 года платформа 1С начала активно развивать поддержку OIDC: в версии 8.3.21 появился встроенный механизм валидации JWT-токенов, а в 8.3.23 — возможность настройки HTTP-сервисов с аутентификацией по OpenID. Это значит, что теперь можно обойтись без самописных обработок на стороне сервера.
Как работает аутентификация OpenID Connect в 1С: пошаговый разбор
Процесс аутентификации через OIDC в 1С состоит из трёх основных этапов:
- Перенаправление на провайдера — пользователь пытается войти в 1С (например, через веб-клиент), а система отправляет его на страницу логина внешнего сервиса (например, https://login.microsoftonline.com/...).
- Получение токенов — после успешного ввода логина/пароля провайдер возвращает в 1С
authorization_code, который обменивается наID_tokenиaccess_token. - Валидация и создание сессии — 1С проверяет подпись токена, извлекает данные пользователя (например,
sub— уникальный идентификатор) и создаёт сессию в базе.
Ключевой момент: 1С не хранит пароли — она только проверяет, что токен выдан доверенным провайдером и не истёк. Для этого используются:
- 🔑 Ключи провайдера — публичные ключи для проверки подписи JWT (обычно загружаются по адресу
https://{провайдер}/.well-known/openid-configuration). - ⏳ Время жизни токена — параметры
exp(время истечения) иnbf(время начала действия) в payload токена. - 🛂 Сопоставление пользователей — правило, по которому
sub(или другой claim) из токена связывается с пользователем в базе 1С.
На практике реализация зависит от версии платформы:
| Версия 1С | Поддержка OIDC | Требуемые доработки | Пример использования |
|---|---|---|---|
8.3.20 и ниже |
Нет встроенной поддержки | Самописный HTTP-сервис на C#/Java или внешнее ПО (например, nginx с модулем auth_jwt) |
Интеграция с Keycloak через промежуточный сервер |
8.3.21–8.3.22 |
Валидация JWT через ПроверкаПодписиJWT() |
Ручная обработка authorization_code и обмен на токены |
Аутентификация через Yandex ID в веб-клиенте |
8.3.23+ |
Полноценная поддержка OIDC в HTTP-сервисах | Настройка через конфигуратор (без кода) | SSO с Azure AD для тонкого клиента |
Важно: если вы используете тонкий клиент или веб-клиент, то аутентификацию через OIDC можно реализовать только через промежуточный сервер (например, nginx или самописный бэкенд). Нативная поддержка в платформе работает только для HTTP-сервисов и REST API.
Перед настройкой OIDC в 1С проверьте, поддерживает ли ваш провайдер PKCE (Proof Key for Code Exchange) — это обязательный механизм защиты для публичных клиентов (например, мобильных приложений).
Настройка OpenID Connect в 1С: пошаговая инструкция
Рассмотрим настройку на примере 1С:Предприятие 8.3.23 и провайдера Keycloak. Этот сценарий подходит для большинства корпоративных систем, где требуется SSO.
Шаг 1. Регистрация клиента в провайдере OIDC
В панели администратора Keycloak (или другого провайдера):
- Создайте новый Client с типом
confidential(для серверных приложений) илиpublic(для браузерных клиентов). - Укажите Valid Redirect URIs — адреса, куда провайдер будет отправлять
authorization_code. Например:https://your-1c-server.ru/oidc/callback - Включите Standard Flow (Authorization Code Flow) и отметьте опции
PKCE(если клиент публичный). - Сохраните
Client IDиClient Secret— они понадобятся для настройки 1С.
Шаг 2. Настройка HTTP-сервиса в 1С
В конфигураторе 1С:
- Откройте ветку
Общие → HTTP-сервисыи создайте новый сервис. - В свойствах сервиса выберите Тип аутентификации: OpenID Connect.
- Заполните параметры:
- Идентификатор клиента —
Client IDиз Keycloak. - Секрет клиента —
Client Secret. - URL провайдера — адрес конфигурации (например,
https://keycloak.example.com/realms/master). - Область (scope) — обычно
openid profile email.
- Идентификатор клиента —
sub (или другой claim) из токена с пользователями 1С. Например, можно использовать email как логин.Шаг 3. Проверка работы
После публикации HTTP-сервиса:
- Откройте в браузере адрес сервиса. Система должна перенаправить вас на страницу логина Keycloak.
- После успешной аутентификации вы вернётесь в 1С, и сервис отобразит данные из токена (если настроено сопоставление пользователей).
- 🔄 В настройках провайдера не указан
post_logout_redirect_uri, и после выхода пользователь снова перенаправляется на логин. - 🛑 Сессия в 1С не уничтожается после логаута (проверьте обработчик
OnSessionEndв HTTP-сервисе). - 🔒 Куки сессии конфликтуют с настройками CORS (актуально для веб-клиента).
- 🔧 Настройте Realm (аналог тенанта) и Client с типом
confidential. - 📋 В настройках клиента укажите Valid Redirect URIs и Web Origins (для CORS).
- 🔑 Для валидации токенов 1С будет автоматически загружать ключи по адресу:
https://{keycloak-host}/realms/{realm-name}/protocol/openid-connect/certs - 🏢 Зарегистрируйте приложение в Azure Portal (раздел
App registrations). - 🔗 В настройках аутентификации укажите Redirect URI и включите ID tokens.
- 🔐 Для валидации токенов 1С будет использовать endpoint:
https://login.microsoftonline.com/{tenant-id}/discovery/v2.0/keys - 📌 Зарегистрируйте приложение в Yandex OAuth (
https://oauth.yandex.ru). - 🔄 Yandex поддерживает только Authorization Code Flow и Implicit Flow (последний не рекомендуется по соображениям безопасности).
- 🔑 Ключи для валидации токенов доступны по адресу:
https://login.yandex.ru/info - 🔒 Используйте HTTPS — OpenID Connect обязательно требует защищённого соединения. Настройте сертификат на сервере 1С (например, через Let’s Encrypt).
- 🔑 Храните Client Secret в безопасности — не жестко прописывайте его в коде. В 1С 8.3.23+ используйте Хранилище паролей (
Общие → Хранилище паролей). - ⏳ Настройте короткое время жизни токенов — оптимально 15–30 минут для
access_tokenи 8–24 часа дляrefresh_token. - 🛡️ Включите PKCE — это защищает от атак типа Authorization Code Interception (обязательно для публичных клиентов).
- 🔍 Валидируйте все параметры токена — проверяйте не только подпись, но и
iss(провайдер),aud(аудитория),exp(время истечения). - 📌 Ограничьте доступ к endpoint’ам OIDC — настройте firewall так, чтобы только доверенные IP могли отправлять запросы на
/tokenи/userinfo. - 🔄 Ротируйте ключи провайдера — в Keycloak или Azure AD настройте автоматическое обновление ключей подписи (обычно раз в несколько месяцев).
- 📡 Мониторьте подозрительную активность — настройте логирование неудачных попыток аутентификации в 1С и на стороне провайдера.
1. Провайдер поддерживает Authorization Code Flow|false
2. В 1С установлена версия 8.3.21+|false
3. Настроены Valid Redirect URIs в провайдере|false
4. Публичные ключи провайдера доступны по .well-known/openid-configuration|false
5. Включён HTTPS на сервере 1С (OIDC требует защищённого соединения)|false
-->
⚠️ Внимание: Если вы используете самоподписанные сертификаты для HTTPS на сервере 1С, провайдер OIDC может блокировать редиректы по соображениям безопасности. В этом случае добавьте корневой сертификат вашего ЦС в доверенные на стороне провайдера (например, в Keycloak это делается через админку в разделе Realm Settings → Keys → Trusted Certificates).
Типичные ошибки при настройке OpenID Connect в 1С и их решения
Даже при корректной настройке OIDC в 1С могут возникать ошибки. Рассмотрим самые распространённые:
| Ошибка | Причина | Решение |
|---|---|---|
invalid_request: redirect_uri_mismatch |
Адрес редиректа в запросе не совпадает с зарегистрированным в провайдере | Проверьте Valid Redirect URIs в настройках клиента провайдера. Убедитесь, что в 1С указан полный URL (включая https://) |
invalid_client: Client authentication failed |
Неверный Client ID или Client Secret |
Перепроверьте credentials в настройках HTTP-сервиса 1С. Для public-клиентов Client Secret может не требоваться |
JWT validation failed: Signature verification failed |
Не удаётся проверить подпись токена (неверный публичный ключ или алгоритм) | Обновите ключи провайдера в 1С через /.well-known/openid-configuration. Убедитесь, что алгоритм подписи (например, RS256) поддерживается платформой |
User not found in 1C database |
Нет сопоставления между claim из токена (например, email) и пользователем 1С |
Настройте правило сопоставления в HTTP-сервисе. Если используете sub, убедитесь, что он уникален и соответствует логину в 1С |
Ещё одна частая проблема — циклические редиректы между 1С и провайдером. Это происходит, если:
⚠️ Внимание: Если вы используете Azure Active Directory как провайдер, обратите внимание на параметр prompt в запросе аутентификации. По умолчанию Azure может кэшировать сессию и не запрашивать логин/пароль повторно, что приводит к ошибкам при смене пользователя. Добавьте prompt=login в URL авторизации, чтобы принудительно показывать форму логина.
Как диагностировать ошибки OIDC в 1С?
Для детальной диагностики включите логирование HTTP-запросов в 1С:
1. В конфигураторе перейдите в Администрирование → Журналы регистрации.
2. Добавьте событие HTTPСервис с уровнем детализации Отладка.
3. Проверьте логи на наличие ошибок валидации токена или редиректов.
4. Для анализа токена используйте сервисы вроде jwt.io (убедитесь, что токен не истёк и подпись валидна).
Если ошибка происходит на стороне провайдера, проверьте логи в его админке (например, в Keycloak это Events → Admin Events).
Примеры кода для работы с OpenID Connect в 1С
Ниже приведены готовые фрагменты кода для типичных задач. Все примеры тестировались на платформе 1С:Предприятие 8.3.23.
1. Ручная валидация JWT-токена (для версий ниже 8.3.21)
Если ваша версия 1С не поддерживает OIDC "из коробки", можно валидировать токен вручную:
Функция ПроверкаJWTТокена(Токен, ПровайдерURL) Экспорт
// Получаем публичные ключи провайдера
КонфигурацияOIDC = ПолучитьJSON(ПровайдерURL + "/.well-known/openid-configuration");
URLКлючей = КонфигурацияOIDC.jwks_uri;
Ключи = ПолучитьJSON(URLКлючей).keys;
// Декодируем заголовок токена
ЗаголовокBase64 = СтрЗаменить(Лев(Токен, СтрПозиция(Токен, ".") - 1), "-", "+");
ЗаголовокBase64 = СтрЗаменить(ЗаголовокBase64, "_", "/");
ЗаголовокJSON = Base64Декодировать(ЗаголовокBase64 + Повтор("=", 4 - (СтрДлина(ЗаголовокBase64) % 4)));
Заголовок = JSONВЗначение(ЗаголовокJSON);
// Ищем ключ для валидации
КлючДляПроверки = Неопределено;
Для Каждого Ключ Из Ключи Цикл
Если Ключ.kid = Заголовок.kid Тогда
КлючДляПроверки = Ключ;
Прервать;
КонецЕсли;
КонецЦикла;
Если КлючДляПроверки = Неопределено Тогда
Возврат Ложь; // Ключ не найден
КонецЕсли;
// Проверяем подпись (упрощённо, без проверки времени истечения)
Возврат ПроверкаПодписиJWT(Токен, КлючДляПроверки.n, КлючДляПроверки.e);
КонецФункции
2. Обмен authorization_code на токены
Для обмена кода на токены используйте HTTP-запрос к endpoint /token:
Функция ПолучитьТокеныПоКоду(Код, ПровайдерURL, ClientID, ClientSecret, RedirectURI)
Запрос = Новый HTTPЗапрос(ПровайдерURL + "/token");
Запрос.УстановитьЗаголовок("Content-Type", "application/x-www-form-urlencoded");
Тело = "grant_type=authorization_code&code=" + Код +
"&redirect_uri=" + RedirectURI +
"&client_id=" + ClientID +
"&client_secret=" + ClientSecret;
Ответ = Запрос.Отправить(Тело, "POST");
Если Ответ.КодСостояния <> 200 Тогда
Возврат Неопределено;
КонецЕсли;
Возврат JSONВЗначение(Ответ.ПолучитьТекст());
КонецФункции
3. Извлечение данных из ID_token
После получения токена декодируйте его payload:
Функция ДекодироватьPayloadJWT(Токен)
// Разделяем токен на части
Части = СтрРазделить(Токен, ".");
Если Части.Количество() <> 3 Тогда
Возврат Неопределено;
КонецЕсли;
// Декодируем payload
PayloadBase64 = СтрЗаменить(Части[1], "-", "+");
PayloadBase64 = СтрЗаменить(PayloadBase64, "_", "/");
PayloadJSON = Base64Декодировать(PayloadBase64 + Повтор("=", 4 - (СтрДлина(PayloadBase64) % 4)));
Возврат JSONВЗначение(PayloadJSON);
КонецФункции
⚠️ Внимание: При работе с Azure AD обратите внимание на формат sub (subject claim) в токене. По умолчанию Azure использует формат f7f6e0ab-1234-5678-90ab-cdef12345678, который может не совпадать с логинами пользователей в 1С. В этом случае настройте в Azure пользовательский claim для sub, чтобы он возвращал, например, email.
Для производственных систем всегда используйте HTTPS и настраивайте CORS на сервере 1С. OpenID Connect требует защищённого соединения, а отсутствие CORS может блокировать редиректы в браузере.
Интеграция с популярными провайдерами: Keycloak, Azure AD, Yandex ID
Каждый провайдер OIDC имеет свои особенности настройки. Рассмотрим нюансы для трёх самых популярных решений.
1. Keycloak
Keycloak — открытый сервер аутентификации с широкими возможностями кастомизации. Для интеграции с 1С:
Особенность: Keycloak позволяет гибко настраивать mappers — правила формирования claim’ов в токене. Например, можно добавить в ID_token дополнительные поля из LDAP (отдел, должность).
2. Azure Active Directory
Azure AD — облачное решение от Microsoft, часто используемое в корпоративных средах. При настройке:
⚠️ Внимание: Azure AD по умолчанию выдаёт токены с коротким временем жизни (1 час). Если пользователи работают в 1С дольше, настройте refresh tokens или увеличьте accessTokenLifetime в политиках тенанта.
3. Yandex ID
Yandex ID подходит для интеграции с сервисами Яндекса (Почта, Диск, Метрика). Особенности:
Важно: Yandex ID не поддерживает кастомизацию claim’ов в токене. Если вам нужно сопоставлять пользователей по email, убедитесь, что этот claim присутствует в ID_token (проверьте через jwt.io).
| Провайдер | Тип клиента | Поддерживаемые flows | Особенности |
|---|---|---|---|
| Keycloak | confidential или public |
Authorization Code, Implicit, Hybrid | Гибкая настройка claim’ов, поддержка LDAP |
| Azure AD | confidential |
Authorization Code, Hybrid | Интеграция с Office 365, поддержка Conditional Access |
| Yandex ID | public |
Authorization Code, Implicit | Простая настройка, но ограниченная кастомизация токенов |
Безопасность: как защитить аутентификацию OpenID Connect в 1С
Использование OIDC повышает безопасность по сравнению с хранением паролей в 1С, но требует правильной настройки. Следующие меры помогут избежать типичных уязвимостей:
Дополнительные рекомендации:
⚠️ Внимание: Если вы используете самописный промежуточный сервер для интеграции OIDC с 1С (например, на Node.js или Python), убедитесь, что он защищён от следующих атак:
- CSRF — проверяйте
state-параметр в ответе провайдера. - Clickjacking — добавляйте заголовок
X-Frame-Options: DENY. - Open Redirect — валидируйте
redirect_uriна стороне сервера. - Промежуточный сервер (например, на Node.js или nginx), который будет валидировать токен и передавать в 1С данные пользователя через заголовки.
- Самописную обработку на стороне 1С с использованием библиотеки для работы с JWT (например, JWT для 1С).
- Выберите центральный провай
Для производственных систем рекомендуется использовать WAF (Web Application Firewall) — например, Cloudflare или mod_security для Apache. Это поможет блокировать подозрительные запросы на этапе сетевого взаимодействия.
FAQ: Частые вопросы по OpenID Connect в 1С
Можно ли использовать OpenID Connect в 1С 8.3.18?
В версиях ниже 8.3.21 нет встроенной поддержки OIDC. Однако вы можете реализовать аутентификацию через:
Обратите внимание, что такой подход требует глубокой проработки безопасности, так как ошибки в валидации токенов могут привести к уязвимостям.
Как настроить SSO между 1С и другими системами через OpenID Connect?
Для организации Single Sign-On (SSO) между 1С и другими системами (например, Bitrix24 или corp.portal):