Аутентификация в 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

d21e7d4467219c4d54024049a697b282.png

Затем Configure OpenID Connect

94d53a1c1f7f23c765297e82accdcd2e.png

В открывшейся форме оставьте все настройки без изменений и нажмите кнопку «Create»

08ab18b46587957c8f31be7025fee14e.png

Откройте консоль администратора, перейдите в нужный realm, в меню слева выберите пункт Services и выберите в списке OAuth2 Provider

5d71e21898f207d18a40be5a613c61b3.png

Найдите настройку OAuth2 Token Signing Algorithm и установите значение RS256. Для пропуска диалога на согласие доступа к данным можете включить настройку Allow clients to skip consent

Теперь создадим OAuth2/OIDC клиент, который будет использовать SPA приложение для аутентификации.

Зайдите в консоль администратора, выберите требуемый realm, в меню слева выберите пункт Applications и далее OAuth 2.0

В таблице Agents нажмите кнопку New

ac08d303abe4d0817c7d0bab9eaff5f0.png

  • Введите 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.

bf14a6879f8530f79a9421dfaaeb7875.png

Далее перейдите в CORS Settings и включите поддержку CORS

b2542520fc3112287b640375193832d0.png

Убедитесь, что в Accepted Methods присутствуют методы GET и POST. Сохраните изменения.

Настройка тестового пользователя

Откройте консоль администратора OpenAM, перейдите в нужный realm, в меню слева выберите пункт Subjects. Задайте пароль для пользователя demo. Для этого выберите его в списке пользователей, и нажмите ссылку Edit в пункте Password, введите и сохраните новый пароль. После настройки выйдите из консоли администратора.

dc973cf280dd85f43920662336c68e9f.png

Настройка 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. Введите логин и пароль пользователя, созданного ранее.

a9932818d50947e18af87d59b4762e1d.png

Подтвердите согласие на доступ к данным, если ранее не отключали.

ca1741b3e9340a1564fe743e3217f0ce.png

Если все настроено корректно, аутентификация в 1С завершится успешно с пользователем demo.

© Habrahabr.ru