Подключение 1С к OpenID Connect с помощью Authelia

24.09.25

Администрирование - Информационная безопасность

В данной инструкции описывается настройка единой аутентификации для веб-клиента 1С через OpenID Connect с использованием Authelia в качестве провайдера идентификации.

Содержание

  1. Введение
  2. Установка и настройка Authelia
  3. Настройка 1С
  4. Настройка Nginx Proxy Manager
  5. Настройка 2FA
  6. Возможные проблемы и решения
  7. Полезные ссылки

 

Введение

OpenID Connect (OIDC) - протокол аутентификации, построенный поверх OAuth 2.0, который позволяет клиентским приложениям проверять личность пользователя на основе аутентификации, выполненной сервером авторизации.

Authelia - открытое решение для аутентификации и авторизации, которое обеспечивает:

  • Двухфакторную аутентификацию (2FA)
  • Single Sign-On (SSO)
  • Интеграцию с различными backend'ами пользователей (LDAP, файлы)
  • Гибкие правила авторизации    

 

В примере используются следующие параметры, которые следует заменить на свои:                             

  • Домен: example.ru
  • Адрес Authelia: auth.example.ru
  • Адрес веб-сервера: 1c.example.ru
  • Информационная база: 1c_smb_demo1    

Потребуется docker, т.к. Authelia разворачивается в docker-контейнере.

В качестве proxy сервера используется Nginx Proxy Manager. Можно и без него, используется только для удобства настройки SSL.

 

Установка и настройка Authelia

Подготовка

1. Клонируйте репозиторий

git clone https://github.com/komarovps/onec-authelia.git
cd onec-authelia

2. Сгенерируйте секреты, которые будут проброшены в Authelia

openssl rand -hex 64 > authelia/secrets/JWT_SECRET
openssl rand -hex 64 > authelia/secrets/STORAGE_ENCRYPTION_KEY
openssl rand -hex 64 > authelia/secrets/SESSION_SECRET
openssl rand -hex 64 > authelia/secrets/OIDC_HMAC_SECRET
openssl genrsa -out authelia/secrets/rsa.2048.key 2048

3. На секреты выдайте права только владельцу

chmod 600 authelia/secrets/*

 

Конфигурация

Конфигурационный файл Authelia: authelia/config/configuration.yml

Если при первом запуске конфигурационного файла не будет, то он сформируется автоматически с параметрами по-умолчанию и описанием. Можно его забэкапить и приступить к дальнейшей настройке.

 

1. Создайте конфигурационный файл из шаблона

Для 1С нужно выбрать тип конфигурации в зависимости от версии платформы:

До версии 8.3.20: configuration_token.yml - используется Implicit Flow

mv authelia/config/configuration_token.yml authelia/config/configuration.yml
rm authelia/config/configuration_code.yml # лишний конфиг удаляем

После 8.3.20 (рекомендуется): configuration_code.yml - используется Authorization Code Flow

mv authelia/config/configuration_code.yml authelia/config/configuration.yml
rm authelia/config/configuration_token.yml # лишний конфиг удаляем

Authorization Code Flow более безопасен, т.к. токены не попадают в браузер.

 

Блоки параметров

authentication_backend - блок, где определеяем откуда брать пользователей. В примере испоьзуетсяфайл файл users_database.yml, но можно подключить LDAP/Active Directory.

totp - настройки двухфакторной аутентификации

access_control - определяет правила доступа (по умолчанию все запрещено), через rules указываем конкретные разрешения.

session - параметры пользовательских сессий (срок жизни и т.д.)

regulation - защита от подобра пароля

storage - параметры базы данных Authelia. Она может быть не только SQLite, но из PostgreSQL, MySQL.

notifier - механизм отправки уведомлений (например SMTP)

identity_providers - параметры провайдеров идентификации. В нашем случае мы используем протокол oidc

Разберем параметры для OIDC:

jwks - параметры закрытого ключа для подписи токенов

enable_client_debug_messages - расширенные сообщения об ошибках для отладки

cors - параметры CORS

claims_policies - определяет, какие поля попадут в id_token

clients - список клиентов и их параметры, которым доступен данный протокол аутентификации.

 

Пользователи

Самый простой вариант ведения пользователей это перечисление их в yaml файле. Но Authelia так же поддерживает и интеграцию с Active Directory.

Файл с пользователями: authelia/config/user_database.yml

1. Создайте пользователей

Пример:

users:
  abdulovyv:
    disabled: false
    displayname: 'Yurii Abdulov'
    password: '$argon2id$v=19$m=16,t=2,p=1$b215c2VjdXJpdHk$7RzcnAvUX6M5p9p28KKX5Q'
    email: 'abdulovyv@example.ru'
    groups:
      - 'admins'
      - 'dev'

В поле password нужно указывать хэш, который можно получить выполнив:

docker run --rm authelia/authelia:latest authelia crypto hash generate argon2 --password 'password'

где в ключе --password указать пароль.

Есть вариант получения хэша пароля без docker - воспользоваться сервисом.

 

Запуск

1. Запустите docker-контейнер c Authelia

docker compose up -d

Сервис будет доступен по адресу:  http://Адрес:9091/

Но заходить туда смысла нет, т.к. у Authelia нет админского UI, как у Keycloak или Authentik. Только yaml конфигурация, только IaC! :) Есть форма авторизации и UI для пользователя (настройка устройств OTP и т.п.) 

 
 Скриншоты интерфейса

2. Проверьте конфигурацию OIDC
Перейдите в браузере по адресу http://Адрес:9091/.well-known/openid-configuration. В ответе должен появится json с конфигурацией.

3. Проверьте лог контейнера

docker logs -f authelia

При успешном запуске, в логе будет что-то вроде:

time="" level=info msg="Authelia v4.39.10 is starting"
time="" level=info msg="Log severity set to info"
time="" level=info msg="Storage schema is being checked for updates"
time="" level=info msg="Storage schema is already up to date"
time="" level=info msg="Startup complete"
time="" level=info msg="Listening for non-TLS connections on '[::]:9091' path '/'" server=main service=server

Следующим шагом, хоть он и не обязательный, рекомендую навести порядок с внешним доступом к сервисам, например через обратный прокси (NPM, Traefik). 

Что можно сделать:

  • Для http://Адрес:9091 сделать удобный CNAME, например auth.example.ru
  • Для веб-сервера с публикациями баз http://Адрес:80 сделать CNAME 1c.example.ru
  • Выпустить и настроить SSL-сертификаты

На выходе получить красивые адреса с доступом по https: https://auth.example.ru, https://1c.example.ru

И после того как обратный прокси будет настроен, можно перейти к настройке веб-публикации базы 1С.

 

Настройка Nginx Proxy Manager

Nginx Proxy Manager используется для проксирования запросов и управления SSL-сертификатами.

Упускаю момент с созданием CNAME для Authelia и веб-сервера в DNS, но допустим у нас уже есть адреса auth.example.ru и 1c.example.ru, которые указывают на адрес NPM: proxy.example.ru. 

Документация по настройке NPM для Authelia

Настройка прокси-хоста для Authelia

1. Создайте snippet proxy.conf на сервере NPM:

sudo mkdir -p /data/nginx/custom/snippets
sudo nano /data/nginx/custom/snippets/proxy.conf

Вставьте в proxy.conf:

 
 proxy.conf

2. Создайте новый Host в Nginx Proxy Manager:

  • Domain Names: auth.example.ru
  • Scheme: http
  • Forward Hostname/IP: IP_адрес_сервера_Authelia
  • Forward Port: 9091
  • Включите Cache Assets, Block Common Exploits, Websockets Support

3. Включите SSL:

  • Перейдите на вкладку SSL
  • Выберите SSL сертификат (его нужно заранее сделать)
  • Включите Force SSL

4. Настройте Advanced конфигурацию:

  • Перейдите на вкладку Advanced
  • Добавьте следующую конфигурацию:
location / {
    include /data/nginx/custom/snippets/proxy.conf;
    proxy_pass $forward_scheme://$server:$port;
}

Настройка прокси-хоста для 1С

1. Создайте новый Proxy Host для 1С:

  • Domain Names: 1c.example.ru
  • Scheme: http
  • Forward Hostname/IP: IP_адрес_сервера_1С
  • Forward Port: 80 или порт веб-сервера 1С

2. Настройте SSL аналогично Authelia

 

Настройка 1С

Настройка веб-публикации

1. Опубликовать базу на веб-сервере и в default.vrd веб-публикации добавить:

Для Authorization Code Flow:

 
 default.vrd

Для Implicit Flow:

 
default.vrd

Описание элемента openidconnect на ИТС.

 

Настройка пользователей в информационной базе

В конфигураторе базы 1С, в настройках пользователя:

  1. Установите флаг Аутентификация OpenID Connect
  2. В поле Имя укажите адрес электронной почты
 
 Свойства пользователя

Сопоставление пользователя будет выполняться по свойству токена указанному в authenticationClaimName и свойству объекта ПользовательИнформационнойБазы указанному в authenticationUserPropertyName.

В данном случае будет взят email из токена (свойсто email из users_database.yml) и name (свойство Имя) из объекта ПользовательИнформационнойБазы.

 

Вход в базу

Переходим в браузере по адресу информационной базы. Нас перебрасывает на форму авторизации. Вводим логин/пароль.

 

Разрешаем доступ к запрашиваемым данным и попадаем в базу.

 

 

Настройка 2FA

Предварительная настройка

Внимание! Перед настройкой 2FA обязательно настройте механизм оповещений через smtp, т.к. на почту пользователя будут отправляться данные для начальной настройки.

Пример с почтовым сервером yandex:

Допустим у нас есть техническая УЗ: auth.robot@yandex.ru

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

touch authelia/secrets/yandex_smtp_password
chmod 600 authelia/secrets/yandex_smtp_password
nano authelia/secrets/yandex_smtp_password # указываем пароль

2. Добавьте в configuration.yml:

notifier:
  disable_startup_check: false

  smtp:
    address: 'submissions://smtp.yandex.ru:465'
    timeout: '10s'
    username: 'auth.robot@yandex.ru'
    password: {{ secret "/secrets/yandex_smtp_password" }}
    sender: 'Authelia <auth.robot@yandex.ru>'
    identifier: '1c.example.ru'
    subject: '[Authelia] {title}'
    startup_check_address: 'auth.robot@yandex.ru'
    disable_require_tls: false
    disable_html_emails: false
    tls:
      server_name: 'smtp.yandex.ru'
      skip_verify: false
      minimum_version: 'TLS1.2'

 

Time-based One-time Password

Для включения TOTP добавьте в configuration.yml:

totp:
  issuer: auth.example.ru
  period: 30

И включите второй фактор для клиента:

identity_providers:
  oidc:
    clients:
      - client_id: 1c_smb_demo1
        authorization_policy: 'two_factor'

Пользователь при входе зарегистрирует свое устройство для получения одноразового пароля и в дальнейшем, будет выводиться форма для его ввода.

 
 Скриншот формы ввода одноразового пароля

 

Возможные проблемы и решения

Ошибка, что в токене нет ключа сопоставления

Внимание! Только для Implicit Flow, т.е. если клиент настроен на response_types: ['id_token token', 'token'].
Для response_types: code этот способ не работает.

При успешной аутентификации в Authelia, 1С получает токен с данными о пользователе. Чаще всего далее идентификация пользователя 1С выполняется по email. Этой информации может не быть в токене.

Чтобы понять, что есть в токене, надо его получить и расшифровать. Тут на помощь приходит декодер токена: https://jwt.ms/

1. В configuration.yml раскомментируем redirect_uris для отладки:

clients:
  - client_id: 1c_smb_demo1
    redirect_uris:
        - 'https://1c.example.ru/smb_demo1/authform.html'
        - 'https://jwt.ms' # Для отладки содержимого jwt

2. Перезагружаем контейнер, чтобы перезагрузился конфиг.

3. Открываем bash и готовим url для отладки:

STATE=$(openssl rand -hex 16); NONCE=$(openssl rand -hex 16)

# В параметре запроса `client_id` установить свой `id` из `configuration.yml`
AUTH_URL="https://auth.example.ru/api/oidc/authorization?client_id=1c_smb_demo1&redirect_uri=https%3A%2F%2Fjwt.ms&response_type=id_token%20token&scope=openid%20email%20profile&state=${STATE}&nonce=${NONCE}"

echo "$AUTH_URL"

4. Открываем полученную ссылку в браузере

 
 Пример ответа

Видно, что в свойствах нет информации о пользователе.

Управлять содержимым токена можно через свойство claims_policies. Добавляем его в configuration.yml:

identity_providers:
  oidc:
    claims_policies:
      id_token_with_email:
        id_token:
          - email
          - email_verified
          - preferred_username
          - name
    clients:
      - client_id: 1c_smb_demo1
        claims_policy: id_token_with_email

Повторяем п.3 и получаем токен с дополненной информацией:

 
Пример ответа с дополненной информацией

С таким токеном уже можно в 1С.

 

В тонком клиенте не загружается форма авторизации

Если в браузере проблем нет, то при входе через тонкий клиент форма авторизации не загружается. В ранних версиях платформы был костыль - помогало переключение между формами ввода логина/пароля и OIDC, но в 8.3.27.1719 и этот способ уже не работает. Разобраться в причине не удалось.

 
 Скриншот пустой формы

 

 

Вступайте в нашу телеграмм-группу Инфостарт

Authelia OpenID Connect OIDC

См. также

Информационная безопасность Пароли 1С v8.3 Бесплатно (free)

Все еще храните пароли в базе? Тогда мы идем к вам! Безопасное и надежное хранение секретов. JWT авторизация. Удобный интерфейс. Демо конфигурация. Бесплатно.

30.05.2024    10550    kamisov    19    

63

Информационная безопасность Программист 1С v8.3 Бесплатно (free)

Рассмотрим в статье более подробную и последовательную настройку аутентификации в 1С с использованием распространенной технологии JWT, которая пришла в программу в платформе версии 8.3.21.1302.

27.02.2024    15959    PROSTO-1C    10    

42

Информационная безопасность Программист 1С v8.3 Абонемент ($m)

Интеграционные решения стали неотъемлемой частью нашей жизни. Правилом хорошего тона в современных приложениях является не давать интегратору доступ к чувствительным данным. Device flow позволяет аутентифицировать пользователя, не показывая приложению чувствительные данные (например: логин и пароль)<br> Рассмотрим Device flow аутентификацию, в приложении, на примере OpenID провайдера Yandex.

1 стартмани

27.10.2023    3537    platonov.e    1    

23

Информационная безопасность Системный администратор 1С v8.3 1C:Бухгалтерия Россия Абонемент ($m)

Продукты на основе решений 1С уверенной поступью захватывают рынок учётных систем в стране. Широкое распространение программ всегда порождает большой интерес к ним со стороны злоумышленников, а пользователь 1С это одна из дверей в защищённый информационный контур предприятия. Обработка позволяет быстро и комплексно оценить настройки безопасности конкретной базы и возможности пользователя этой базы на сервере. Также можно оценить некоторые аспекты сетевой безопасности предприятия со стороны сервера 1С.

5 стартмани

24.04.2023    7528    25    soulner    8    

33

Информационная безопасность Системный администратор Программист 1С v8.3 1С:ERP Управление предприятием 2 Абонемент ($m)

1С, начиная с версии платформы 8.3.21, добавили в систему возможность двойной аутентификации. Как это работает: в пользователе информационной базы появилось свойство «Аутентификация токеном доступа» (АутентификацияТокеномДоступа во встроенном языке), если установить этот признак и осуществить ряд манипуляций на встроенном языке, то появляется возможность при аутентификации отправлять HTTP запросы, которые и реализуют этот самый второй фактор. Данное расширение позволяет организовать двухфакторную аутентификацию с помощью электронной почты или мессенджера Telegram.

2 стартмани

08.12.2022    9196    68    Silenser    12    

24

Информационная безопасность 1С v8.3 1C:Бухгалтерия Бесплатно (free)

От клиента клиенту, от одной системы к другой, мы вновь и вновь встречаем одни и те же проблемы и дыры в безопасности. На конференции Infostart Event 2021 Post-Apocalypse Виталий Онянов рассказал о базовых принципах безопасности информационных систем и представил чек-лист, с помощью которого вы сможете проверить свою систему на уязвимость.

26.10.2022    13252    Tavalik    46    

118
Для отправки сообщения требуется регистрация/авторизация