Авторизация в информационных системах играет ключевую роль в обеспечении безопасности и конфиденциальности данных. В контексте 1С и её HTTP-сервисов, стандартная базовая авторизация по логину и паролю пользователя 1С часто оказывается недостаточной или неоптимальной, особенно когда требуется интеграция с внешними системами, использующими токены. Рассмотрим различные подходы к реализации авторизации в 1С по токену, начиная с обходных путей, предложенных на форумах, и заканчивая современными, стандартизированными решениями, доступными в платформе.
Наша цель — разобраться, как можно перейти от традиционной авторизации к более гибким и безопасным методам на основе токенов, таким как JWT или OAuth 2.0/OpenID Connect. Мы проанализируем преимущества и недостатки каждого подхода, а также рассмотрим особенности их реализации в экосистеме 1С.
На ранних этапах развития веб-интеграций в 1С, когда встроенных механизмов работы с токенами не было, разработчики часто прибегали к различным "обходным" решениям. Эти методы, хоть и требовали дополнительных усилий и инфраструктуры, позволяли решить задачу авторизации по токену.
Одним из наиболее распространенных способов было создание промежуточного звена — прокси-сервера, который брал на себя функцию преобразования внешнего токена в авторизационные данные, понятные 1С. Этот подход часто называют "умной прокладкой".
Принцип работы:
Authorization: Basic [Base64(логин:пароль)]Сценарии использования:
Преимущества:
Недостатки:
Для реализации такой "прокладки" часто используют Nginx с модулями, позволяющими писать свою логику (например, Lua-скрипты), или же IIS с модулем URL Rewrite и кастомными обработчиками.
В некоторых случаях, особенно в более ранних реализациях, использовался подход, основанный на цифровой подписи. Этот метод подразумевал генерацию уникальной "цифровой подписи" (или ключа), которая хранилась на стороне клиента (например, на флешке) и проверялась веб-сервером при подключении.
Принцип работы:
Особенности:
С развитием платформы 1С и её интеграционных возможностей, появились встроенные и стандартизированные механизмы для работы с токенами. Эти подходы считаются более безопасными, надежными и предпочтительными для современных систем.
Прежде чем мы углубимся в современные методы, необходимо подчеркнуть критическую важность использования HTTPS для любого вида авторизации, будь то базовая авторизация, токены или что-либо еще. HTTPS обеспечивает шифрование данных между клиентом и сервером, предотвращая перехват конфиденциальной информации (логинов, паролей, токенов) злоумышленниками. Настройка HTTPS является базовым требованием безопасности для веб-сервисов 1С.
Начиная с версии платформы 8.3.21, в 1С появилась встроенная поддержка авторизации по JSON Web Token (JWT). Это значительно упрощает реализацию безопасной и стандартизированной авторизации по токену. Для создания и проверки токенов с подписью HS256 пригодится обработка для создания JWT-токенов в 1С.
Что такое JWT?
JWT — это компактный, URL-безопасный стандарт для представления утверждений (claims), которые передаются между двумя сторонами. JWT состоит из трех частей, разделенных точками:
iss (issuer) — эмитент токена.sub (subject) — субъект токена (например, идентификатор пользователя).aud (audience) — аудитория, для которой предназначен токен.exp (expiration time) — время истечения срока действия токена.iat (issued at) — время выдачи токена.Принцип работы в 1С:
Платформа 1С выступает как получатель и валидатор JWT-токенов. Для генерации токенов во внешней системе, а также для создания внутренних токенов между базами 1С, используются следующие механизмы:
ТокенДоступа и подписывать его с использованием различных алгоритмов. Этот объект позволяет настроить все необходимые утверждения (claims) и выбрать алгоритм шифрования. Сгенерированный токен представляет собой строку.Authorization в формате Bearer Token: Authorization: Bearer <ваш_jwt_токен>AccessToken: GET /e1cib/hs/MyService?AccessToken=<ваш_jwt_токен>exp).iss).sub или email) с существующими пользователями 1С согласно настройкам.Настройка публикации (.vrd):
Для активации и настройки JWT-авторизации необходимо внести изменения в файл веб-публикации 1С (.vrd) для вашей информационной базы или конкретного HTTP-сервиса. Мы указываем, каким эмитентам доверяем, какими ключами проверять подпись и как сопоставлять данные из токена с пользователями 1С:
AccessTokenIssuers: Список доверенных эмитентов токенов. Мы указываем URL-адреса или идентификаторы систем, которые могут генерировать токены, принимаемые этой 1С.JwtKeys: Секции для хранения открытых ключей (public keys), используемых для проверки цифровой подписи JWT-токенов. Мы можем использовать ключи в форматах PEM, JWKS (JSON Web Key Set) или просто Base64-кодированные секреты для HMAC.AccessTokenClaimsUserMapping: Правила сопоставления полей из полезной нагрузки токена (claims) с пользователями 1С. Например, мы можем указать, что поле sub (subject) из токена должно соответствовать имени пользователя 1С, или поле email — адресу электронной почты пользователя.AuthenticationByAccessTokenAllowed: Для каждого пользователя 1С можно явно разрешить или запретить аутентификацию по токенам через его свойства или программно.Применение:
JWT-авторизация идеально подходит для:
1С также поддерживает интеграцию с системами, использующими более широкие протоколы авторизации и аутентификации — OAuth 2.0 и OpenID Connect (OIDC). Эти протоколы позволяют реализовать единый вход (Single Sign-On, SSO) и использовать учетные записи внешних OIDC-совместимых сервисов (Google, Microsoft, Yandex Identity Hub, Keycloak) для входа в 1С. Для практической реализации такой авторизации подойдёт готовое решение для аутентификации через Google OAuth 2.0.
Различия между OAuth 2.0 и OIDC:
Преимущества использования OIDC:
Реализация интеграции с OIDC в 1С:
1С может выступать в роли OIDC-клиента. Процесс интеграции включает следующие шаги:
Client ID (идентификатор клиента) и Client Secret (секретный ключ клиента).Authorization Code.Authorization Code на токены: После получения Authorization Code, 1С отправляет запрос к OIDC-провайдеру (используя Client ID и Client Secret) для обмена этого кода на Access Token (для доступа к ресурсам) и ID Token (для информации о пользователе).ID Token: ID Token — это JWT-токен, который содержит информацию о прошедшем аутентификацию пользователе. 1С проверяет его подпись и срок действия, а затем извлекает из него информацию (например, email, имя пользователя), которую сопоставляет с учетными записями 1С.Платформа 1С предоставляет необходимые инструменты для выполнения HTTP-запросов и работы с JSON, что делает реализацию OIDC-клиента вполне выполнимой на встроенном языке. Более того, продукты, такие как "1С:Шина", уже предлагают встроенные механизмы для упрощенной настройки аутентификации OAuth2 для входа пользователей в приложения, что значительно облегчает процесс.
Помимо рассмотренных механизмов, существуют и другие аспекты, которые мы должны учитывать при реализации авторизации по токену в 1С.
В некоторых сценариях требуется авторизация между двумя системами без участия конечного пользователя. Это называется "двухсторонняя" или "сервер-серверная" авторизация OAuth 2.0 (иногда её называют Client Credentials Grant Type или использованием Service Accounts). В этом случае 1С может выступать в роли клиента, который авторизуется в API внешних сервисов (например, Google API) напрямую, используя свои учетные данные (Client ID, Client Secret) или цифровую подпись, без необходимости подтверждения от пользователя.
Применение: Автоматизированные фоновые процессы в 1С, которые должны получать доступ к данным во внешних системах (например, загружать курсы валют, отправлять отчеты), когда нет интерактивного пользователя.
Для реализации более сложных сценариев единого входа (SSO), централизованного управления пользователями и гибкой политики безопасности, мы можем интегрировать 1С с внешними Identity-провайдерами (IdP). Такие решения, как IdentityServer 4, Azure B2C или Keycloak, предоставляют полноценную инфраструктуру для OIDC и OAuth 2.0. В этом случае 1С будет выступать как клиент для этих IdP, делегируя им функции аутентификации и получения информации о пользователе.
Преимущества: Полный контроль над аутентификацией, поддержка множества протоколов, широкие возможности по настройке политик безопасности, интеграция с каталогами пользователей (LDAP, Active Directory).
Мы рассмотрели различные подходы к реализации авторизации по токену в 1С HTTP-сервисах: от "умных прокладок" и прокси-серверов до современных механизмов, встроенных в платформу. Если раньше приходилось изобретать собственные решения или использовать прокси для преобразования токенов во внутреннюю авторизацию 1С, то сегодня, с появлением поддержки JWT (начиная с версии 8.3.21) и возможностями интеграции с OIDC-провайдерами, платформа 1С предоставляет стандартизированные и безопасные инструменты.
При выборе метода авторизации, мы рекомендуем отдавать предпочтение встроенным возможностям платформы 1С для работы с JWT и интеграции с OIDC. Эти подходы обеспечивают высокую безопасность, гибкость и соответствие современным стандартам. Использование прокси-серверов оправдано в случаях, когда требуется поддержка устаревших систем, или когда невозможно обновить платформу 1С до требуемой версии. Независимо от выбранного метода, мы должны помнить о фундаментальной важности использования HTTPS для защиты передаваемых данных.