Аутентификация через 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 решает две ключевые проблемы:

  1. Отсутствие встроенной поддержки современных протоколов аутентификации (до версии 8.3.20 включительно).
  2. Сложность синхронизации пользователей между 1С и внешними системами (например, при использовании LDAP требуется ручное сопоставление ролей).

С 2021 года платформа 1С начала активно развивать поддержку OIDC: в версии 8.3.21 появился встроенный механизм валидации JWT-токенов, а в 8.3.23 — возможность настройки HTTP-сервисов с аутентификацией по OpenID. Это значит, что теперь можно обойтись без самописных обработок на стороне сервера.

📊 Какой провайдер OpenID Connect вы планируете использовать с 1С?
Keycloak
Azure Active Directory
Yandex ID
Google Auth
Другой

Как работает аутентификация OpenID Connect в 1С: пошаговый разбор

Процесс аутентификации через OIDC в 1С состоит из трёх основных этапов:

  1. Перенаправление на провайдера — пользователь пытается войти в 1С (например, через веб-клиент), а система отправляет его на страницу логина внешнего сервиса (например, https://login.microsoftonline.com/...).
  2. Получение токенов — после успешного ввода логина/пароля провайдер возвращает в 1С authorization_code, который обменивается на ID_token и access_token.
  3. Валидация и создание сессии — 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 (или другого провайдера):

  1. Создайте новый Client с типом confidential (для серверных приложений) или public (для браузерных клиентов).
  2. Укажите Valid Redirect URIs — адреса, куда провайдер будет отправлять authorization_code. Например:
    https://your-1c-server.ru/oidc/callback
  3. Включите Standard Flow (Authorization Code Flow) и отметьте опции PKCE (если клиент публичный).
  4. Сохраните Client ID и Client Secret — они понадобятся для настройки 1С.

Шаг 2. Настройка HTTP-сервиса в 1С

В конфигураторе 1С:

  1. Откройте ветку Общие → HTTP-сервисы и создайте новый сервис.
  2. В свойствах сервиса выберите Тип аутентификации: OpenID Connect.
  3. Заполните параметры:
    • Идентификатор клиентаClient ID из Keycloak.
    • Секрет клиентаClient Secret.
    • URL провайдера — адрес конфигурации (например, https://keycloak.example.com/realms/master).
    • Область (scope) — обычно openid profile email.
  • В разделе Сопоставление пользователей укажите, как связывать sub (или другой claim) из токена с пользователями 1С. Например, можно использовать email как логин.
  • Шаг 3. Проверка работы

    После публикации HTTP-сервиса:

    1. Откройте в браузере адрес сервиса. Система должна перенаправить вас на страницу логина Keycloak.
    2. После успешной аутентификации вы вернётесь в 1С, и сервис отобразит данные из токена (если настроено сопоставление пользователей).
    3. 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С и провайдером. Это происходит, если:

      • 🔄 В настройках провайдера не указан post_logout_redirect_uri, и после выхода пользователь снова перенаправляется на логин.
      • 🛑 Сессия в 1С не уничтожается после логаута (проверьте обработчик OnSessionEnd в HTTP-сервисе).
      • 🔒 Куки сессии конфликтуют с настройками CORS (актуально для веб-клиента).

      ⚠️ Внимание: Если вы используете 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С:

      • 🔧 Настройте Realm (аналог тенанта) и Client с типом confidential.
      • 📋 В настройках клиента укажите Valid Redirect URIs и Web Origins (для CORS).
      • 🔑 Для валидации токенов 1С будет автоматически загружать ключи по адресу:
        https://{keycloak-host}/realms/{realm-name}/protocol/openid-connect/certs

      Особенность: Keycloak позволяет гибко настраивать mappers — правила формирования claim’ов в токене. Например, можно добавить в ID_token дополнительные поля из LDAP (отдел, должность).

      2. Azure Active Directory

      Azure AD — облачное решение от Microsoft, часто используемое в корпоративных средах. При настройке:

      • 🏢 Зарегистрируйте приложение в Azure Portal (раздел App registrations).
      • 🔗 В настройках аутентификации укажите Redirect URI и включите ID tokens.
      • 🔐 Для валидации токенов 1С будет использовать endpoint:
        https://login.microsoftonline.com/{tenant-id}/discovery/v2.0/keys

      ⚠️ Внимание: Azure AD по умолчанию выдаёт токены с коротким временем жизни (1 час). Если пользователи работают в 1С дольше, настройте refresh tokens или увеличьте accessTokenLifetime в политиках тенанта.

      3. Yandex ID

      Yandex ID подходит для интеграции с сервисами Яндекса (Почта, Диск, Метрика). Особенности:

      • 📌 Зарегистрируйте приложение в Yandex OAuth (https://oauth.yandex.ru).
      • 🔄 Yandex поддерживает только Authorization Code Flow и Implicit Flow (последний не рекомендуется по соображениям безопасности).
      • 🔑 Ключи для валидации токенов доступны по адресу:
        https://login.yandex.ru/info

      Важно: 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С, но требует правильной настройки. Следующие меры помогут избежать типичных уязвимостей:

      • 🔒 Используйте 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С и на стороне провайдера.

    ⚠️ Внимание: Если вы используете самописный промежуточный сервер для интеграции OIDC с 1С (например, на Node.js или Python), убедитесь, что он защищён от следующих атак:

    • CSRF — проверяйте state-параметр в ответе провайдера.
    • Clickjacking — добавляйте заголовок X-Frame-Options: DENY.
    • Open Redirect — валидируйте redirect_uri на стороне сервера.
    • Для производственных систем рекомендуется использовать WAF (Web Application Firewall) — например, Cloudflare или mod_security для Apache. Это поможет блокировать подозрительные запросы на этапе сетевого взаимодействия.

      FAQ: Частые вопросы по OpenID Connect в 1С

      Можно ли использовать OpenID Connect в 1С 8.3.18?

      В версиях ниже 8.3.21 нет встроенной поддержки OIDC. Однако вы можете реализовать аутентификацию через:

      1. Промежуточный сервер (например, на Node.js или nginx), который будет валидировать токен и передавать в 1С данные пользователя через заголовки.
      2. Самописную обработку на стороне 1С с использованием библиотеки для работы с JWT (например, JWT для 1С).

      Обратите внимание, что такой подход требует глубокой проработки безопасности, так как ошибки в валидации токенов могут привести к уязвимостям.

      Как настроить SSO между 1С и другими системами через OpenID Connect?

      Для организации Single Sign-On (SSO) между 1С и другими системами (например, Bitrix24 или corp.portal):

      1. Выберите центральный провай