Введение
Преимущества использования провайдера аутентификации, такого как например Okta, трудно переоценить. У нас появляется централизованное рабочее место для управления пользователями сразу во всех системах - будь то jira, slack, trello, service desk, bitbucket, gitlab, 1С или даже собственное приложение.
Т.к. многие взрослые сервисы, вроде jira, уже обеспечивают встроенную интеграцию с Okta по одной кнопке, то в данном туториале мы попробуем сосредоточится на 1С и реализовать аутентификацию пользователей и single sign-on (SSO) функциональность, используя поддержку OpenID Connect, доступную начиная с версии платформы 1С 8.3.13. Как это будет выглядеть:
- Пользователь открывает стартовое окно 1с через браузер и видит окно авторизации 1С
- При нажатии на кнопку okta пользователь перенаправляется на страницу Okta, где проходит аутентификацию
- При этом 1с отправляет в Okta следующий запрос:
https://{YOUR_OKTA_URL}/oauth2/v1/authorize
?client_id={YOUR_CLIENT_ID}
&redirect_uri={YOUR_REDIRECT_URL}
&response_type=id_token%20token
&scope=openid%20email%20okta.users.read
&state={RANDOM_STATE}
&nonce={RANDOM_NONCE}
- Okta возвращает ID токен в следующем формате:
id_token=AAAAAAA
token_type=Bearer
expires_in=3600
scope=openid+email+okta.users.read
state=445a0effda7a4c23882e5aed99009109
-
1C авторизует пользователя по email и открывает окно конфигурации
Реализация
Для выполнения урока предварительно подготовьте развернутую базу 1С на веб-сервере. Подойдет даже файловая и не опубликованная наружу. Также отмечу, что все работы выполнялись на Платформе 1С версии 8.3.18.1208. Итак, начнем:
1. Создание аккаунта Okta и регистрация приложения 1С
1 В Okta есть два типа аккаунта - клиентский и разработчика. Нам нужен аккаунт разработчика, поэтому регистриуемся здесь https://developer.okta.com/signup/. Стоит отметить, что сервис не является бесплатным, но для наших целей с головой хватит ограничений бесплатного тарифа.
2 После регистрации мы получаем свой домен. Заходим в него. На главной странице консоли админа переходим в меню Applications и жмем Add application
3. Открывается окно со списком говых интеграций с приложениями. Нам оно не подходит, так что кликаем на кнопку в правой части Create new App, в диалоговом окне выбираем OpenID Connect и нажимаем Create
4. В появившемся окне заполняем Application Name и Login Redirect URIs и нажимаем Save. В качестве Login Redirect URIs нужно указать адрес к информационной базе 1С, опубликованной на веб-сервере по следующему формату: http://ХОСТ/ИМЯ_БАЗЫ/authform.html
5. Теперь мы открываем свойства самого приложения, которое только что создали. Напротив General Setting нажимаем на иконку с редактированием и ставим все галочки для поля Allowed Granted types. В реальности для 1С не требуется все типы токенов, но эта особенность находится за рамками данной статьи.
6. Переходим теперь на вкладку Directory -> people и создаем пользователя, которого мы хотим авторизовать в приложении 1С. Все шаги создания пользователя элементарны, и поэтмоу не будем акцентировать на них внимания в данной статье. Обратите внимание только на e-mail пользователя. Почта в 1С и в Okta должна совпадать, т.к. синхронизация будет выполняться именно по ней.
На этом настройка Okta завершена.
2. Настройка публикации 1С
1. Открываем файл default.vrd, который находится в каталоге, в котором была опубликована конфигурация 1С и редактируем его содержимое. Для этого добавляем новый дочерний тег <openidconnect> к родительскому тегу <point>:
<openidconnect>
<providers><![CDATA[[
{
"name": "okta",
"title": "okta",
"discovery": "https:/ДОМЕН_ОКТЫ/oauth2/default/.well-known/openid-configuration",
"authenticationClaimName": "email",
"clientconfig": {
"authority": "https://ДОМЕН_ОКТЫ",
"client_id": "ВАШ_CLIENT_ID",
"redirect_uri": "ВАШ_REDIRECT_URL",
"response_type": "id_token token",
"scope": "openid email okta.users.read",
"filterProtocolClaims": false,
"loadUserInfo": false
}
}
]]]>
</providers>
<allowStandardAuthentication>true</allowStandardAuthentication>
</openidconnect>
В качестве значения полей подстановки используем следующие:
- ДОМЕН_ОКТЫ - URL с доменом, как написано в консоли админа Okta (например dev-9999999999.okta.com)
- ВАШ_CLIENT_ID - Свойство приложения Okta, которое мы создали на прошлом шаге
- ВАШ_REDIRECT_URL - адрес к информационной базе, должен совпадать с веденным на странице приложения Okta
Все значения полей можно найти на странице приложения в консоли администратора (вкладка applications), которое мы создали на предыдущем шаге.
Как видно из настроек, синронизация пользователей будет выполняться через e-mail
2. Создаем через конфигуратор нового пользователя в базе, которому в качестве имени и e-mail задаем e-mail пользователя, которого мы завели в Okta
3. На этом настройка в 1С завершена. Не забудьте перезагрузить веб-сервер перед тестированием
3. Тестирование
Теперь опишу шаги о том, как это с точки зрения пользователя должно работать:
1. Открывается браузер с окном входа в нашу 1С конфигурацию.
2. В нижней части окна авторизаци видим дополнительную кнопку okta, нажимаем на нее.
3. Открывается страница авторизации Okta, вводим e-mail и пароль пользователя, указанного в Okta и в 1С.
4. Браузер перенаправляет нас обратно в 1С, где открывается начальная страница 1С приложения после авторизации.
На этом все! Спасибо за внимание. Надеюсь статья будет полезной и прольет немного света на такого замечательного провайдера авторизации, как Okta.