Аутентификация в 1С через OpenAM по протоколу OAuth2/OIDC
Введение
1С поддерживает «из коробки» несколько способов аутентификации — например по логину и паролю и аутентификацию операционной системы. Но иногда этих способов недостаточно для удобства пользователей и удовлетворения требований безопасности. Например, 1С не поддерживает аутентификацию по коду из СМС или по биометрии.
Больше возможностей для управления аутентификацией реализуют специальные решения. Одним из таких решения является OpenAM.
В данной статье мы настроим аутентификацию в 1C через OpenAM используя OAuth2/OIDC протокол.
Настройка OpenAM
Установка OpenAM
Пусть OpenAM располагается на хосте openam.example.org
. Если у вас уже установлен OpenAM, можете пропустить этот шаг. Самым простым способом развернуть OpenAM можно в Docker контейнере. Перед запуском, добавьте имя хоста и IP адрес в файл hosts
, например 127.0.0.1 openam.example.org
.
В Windows системах файл hosts
находится по адресу C:\\Windows\\System32\\drivers\\etc\\hosts
, в Linux и Mac находится по адресу /etc/hosts
После этого запустите Docker контейнер OpenAM Выполните следующую команду:
docker run -h openam.example.org -p 8080:8080 --name openam openidentityplatform/openam
После того, как сервер запустится, запустите начальную конфигурацию OpenAM. Выполните следующую команду:
docker exec -w '/usr/openam/ssoconfiguratortools' openam bash -c \\
'echo "ACCEPT_LICENSES=true
SERVER_URL=http://openam.example.org:8080
DEPLOYMENT_URI=/$OPENAM_PATH
BASE_DIR=$OPENAM_DATA_DIR
locale=en_US
PLATFORM_LOCALE=en_US
AM_ENC_KEY=
ADMIN_PWD=passw0rd
AMLDAPUSERPASSWD=p@passw0rd
COOKIE_DOMAIN=openam.example.org
ACCEPT_LICENSES=true
DATA_STORE=embedded
DIRECTORY_SSL=SIMPLE
DIRECTORY_SERVER=openam.example.org
DIRECTORY_PORT=50389
DIRECTORY_ADMIN_PORT=4444
DIRECTORY_JMX_PORT=1689
ROOT_SUFFIX=dc=openam,dc=example,dc=org
DS_DIRMGRDN=cn=Directory Manager
DS_DIRMGRPASSWD=passw0rd" > conf.file && java -jar openam-configurator-tool*.jar --file conf.file'
После успешной конфигурации можно приступить к дальнейшей настройке.
Настройка OAuth2/OIDC провайдера
Зайдите в консоль администратора по ссылке
http://openam.example.org:8080/openam/XUI/#login/
В поле логин введите значение amadmin
, поле пароль введите значение из параметра ADMIN_PWD
команды установки, в данном случае passw0rd
Настройка OAuth2/OIDC
Выберите требуемый realm. В разделе Dashboard кликните на элементе Configure OAuth Provider
Затем Configure OpenID Connect
В открывшейся форме оставьте все настройки без изменений и нажмите кнопку «Create»
Откройте консоль администратора, перейдите в нужный realm, в меню слева выберите пункт Services
и выберите в списке OAuth2 Provider
Найдите настройку OAuth2 Token Signing Algorithm
и установите значение RS256
. Для пропуска диалога на согласие доступа к данным можете включить настройку Allow clients to skip consent
Теперь создадим OAuth2/OIDC клиент, который будет использовать SPA приложение для аутентификации.
Зайдите в консоль администратора, выберите требуемый realm, в меню слева выберите пункт Applications и далее OAuth 2.0
В таблице Agents нажмите кнопку New
Введите Name (client_id) и Password (client_secret) нового приложения. Пусть client_id будет
1c_enterprise
Откройте настройки приложения
Установите Client type в Public
Добавьте в список Redirection URIs URI вашего приложения 1С. В нашем случае это будет
http://localhost/infobase/authform.html
В список scope добавьте значение
openid
, это нужно, чтобы сразу получить идентификатор пользователя из возвращаемого объектаid_token
.Установите настройку
ID Token Signing Algorithm:
вRS256
Установите настройку
Public key selector
вJWKs_URI
Если хотите, чтобы пользователи пропускали окно согласия на доступ к данным, включите чекбокс
Implied consent
Настройка CORS
1С для получения id_token
выполняет кросс-доменные запросы, то есть запросы на домен, на котором развернут OpenAM. Для того, чтобы такие запросы не блокировал браузер, нужно включить поддержку CORS в OpenAM.
Откройте консоль администратора. В верхнем меню выберите пункт Configure → Global Services.
Далее перейдите в CORS Settings и включите поддержку CORS
Убедитесь, что в Accepted Methods присутствуют методы GET и POST. Сохраните изменения.
Настройка тестового пользователя
Откройте консоль администратора OpenAM, перейдите в нужный realm, в меню слева выберите пункт Subjects. Задайте пароль для пользователя demo
. Для этого выберите его в списке пользователей, и нажмите ссылку Edit в пункте Password, введите и сохраните новый пароль. После настройки выйдите из консоли администратора.
Настройка 1С
Откройте конфигуратор базы 1С, создайте пользователя 1С c логином demo
и назначьте ему необходимые права.
Пусть база 1С развернута на локальном веб сервере по URL http://localhost/infobase
.
Добавьте в файл описания публикации базыdefault.vrd
настройки аутентификации по протоколу OpenID Connect:
",
"client_id": "1c_enterprise",
"authority": " "
},
"authenticationUserPropertyName": "name",
"authenticationClaimName": "sub",
"discovery": "",
"title": "OIDC (OpenAM)",
"name": "openam_oidc"
}
]]]>
true
Проверка решения
Откройте браузер и откройте базу 1С по URL http://localhost/infobase
. Вас перенаправит на аутентификацию OpenAM. Введите логин и пароль пользователя, созданного ранее.
Подтвердите согласие на доступ к данным, если ранее не отключали.
Если все настроено корректно, аутентификация в 1С завершится успешно с пользователем demo
.