Элемент <openid>
Описаны элементы <openid> и <openidconnect> в файле default.vrd: настройка OpenID-провайдеров, параметры их конфигурации и сценарий аутентификации в клиентских приложениях BAS.. Описание элемента. Элемент <rely>. Элемент <provider>. Элемент <openidconnect>
Описание элемента
Этот элемент описывает настройки, связанные с OpenID-аутентификацией. Элемент <openid> подчинен элементу <point> и может быть один или отсутствовать. Элементу <openid> подчинены элементы <rely> и <provider>. Каждый из подчиненных элементов может быть один или отсутствовать.
Этот элемент не имеет атрибутов.
Элемент <rely>
Элемент содержит адрес информационной базы, являющейся OpenID-провайдером.
Атрибут url
Определяет URL информационной базы BAS, являющейся OpenID-провайдером. Информационную базу необходимо опубликовать особым образом.
Внимание!
Взаимодействие с OpenID-провайдером осуществляется только через HTTPS-соединение.
Примечание
URL OpenID-провайдера не должен заканчиваться символом «/». Правильно: https://myserver.org/users-ib/ebasib/oid2op, неправильно: https://myserver.org/users-ib/ebasib/oid2op/.
Пример:
<rely url="https://myserver.org/users-ib/ebasib/oid2op"/>
Элемент <provider>
Описание элемента
Элемент указывает, что эта информационная база является OpenID-провайдером. Этому элементу подчинен элемент <lifetime>, который может быть один или отсутствовать.
Пример:
<?xml version="1.0" encoding="UTF-8"?>
<point xmlns=http://bas-soft.eu/8.2/virtual-resource-system xmlns:xs=http://www.w3.org/2001/XMLSchema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
base="/demo"
ib="Srvr="tcp://Server";Ref="demo";"
enable="false">
<openid>
<provider/>
</openid>
</point>
Элемент <lifetime>
Элемент определяет время жизни признака аутентифицированности идентификатора в секундах. Если он не указан, значением по умолчанию является 86 400 секунд (24 часа). Максимальное время жизни аутентификационных данных составляет 604 800 секунд (7 суток). Если в элементе lifetime указано число, большее максимального значения, будет использовано максимальное значение.
Пример:
<?xml version="1.0" encoding="UTF-8"?>
<point xmlns=http://bas-soft.eu/8.2/virtual-resource-system xmlns:xs=http://www.w3.org/2001/XMLSchema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
base="/demo"
ib="Srvr="tcp://Server";Ref="demo";"
enable="false">
<openid>
<provider>
<lifetime>432000</lifetime>
</provider>
</openid>
</point>
Элемент <returnto>
Элемент <returnto> подчинен элементу <provider>, его наличие необязательно, а количество таких элементов не ограничено.
<returnto>mysite\.org</returnto> <returnto>.*\.bas-soft\.eu</returnto>
Содержимое элемента является регулярным выражением, определяющим маску разрешенных имен сайтов, на которые может быть перенаправлен веб-браузер пользователя (параметр запроса openid.return_to) после выполнения команды OpenID-провайдера.
Если при публикации OpenID-провайдера не указан ни один элемент <returnto>, любой запрос к OpenID-провайдеру, содержащий параметр openid.return_to, будет завершаться ошибкой HTTP 400.
Элемент <openidconnect>
Описание элемента
Этот элемент описывает параметры, связанные с аутентификацией по протоколу OpenID Connect. Применяется при использовании тонкого клиента и веб-клиента. Элемент <openidconnect> подчинен элементу <point> и может быть один или отсутствовать. Элементу <openidconnect> подчинены элементы <providers> и <allowStandardAuthentication>. Каждый из подчиненных элементов может быть один или отсутствовать.
Этот элемент не имеет атрибутов.
<openidconnect>
<providers><![CDATA[[
<json-data>
]]]>
</providers>
<allowStandardAuthentication>true</allowStandardAuthentication>
<openidconnect>
Элемент <providers>
Этот элемент содержит описание внешних OpenID-провайдеров, поддерживающих протокол авторизации OpenID Connect v1.0 (https://openid.net/connect/). Описание представляет собой массив объектов, каждый из которых описывает одного OpenID-провайдера. Массив представлен в виде JSON-сериализации.
Каждый провайдер описывается объектом со следующими свойствами:
- name – идентификатор провайдера. Должен быть уникальным в пределах массива. Если массив содержит несколько провайдеров с одинаковым идентификатором, будет использован последний в массиве.
- title – текстовое представление провайдера. Будет отображаться на кнопке провайдера на странице аутентификации при отсутствии изображения (image).
- image – графическое представление провайдера. Будет отображаться на кнопке провайдера на странице аутентификации. Изображение указывается как data:image в формате base64.
- discovery – определяет URL провайдера, обращение по которому позволяет получить все его настройки (discovery endpoint URL). Рекомендуется использовать провайдеров, поддерживающих запись discovery endpoint.
- authenticationClaimName – определяет, какое поле JSON-файла (JSON Web Token, JWT) с результатами аутентификации следует использовать как идентификатор для сопоставления пользователя информационной базы с пользователем провайдера OpenID Connect. Если не указано, используется поле с электронной почтой.
authenticationUserPropertyName – определяет, какое поле в настройках пользователя информационной базы используется для сравнения с идентификатором пользователя, переданным провайдером OpenID Connect. Допускается указание следующих значений:
- name – имя пользователя (свойство Name/Имя объекта InfoBaseUser/ПользовательИнформационнойБазы).
- OSUser – имя пользователя операционной системы (свойство OSUser/ПользовательОС объекта InfoBaseUser/ПользовательИнформационнойБазы).
- endSessionEndpoint – определяет URL, на который будет выполнен переход после выполнения команды завершения сеанса аутентификации. К URL автоматически будет добавлен параметр id_token_hint, в который будет помещен токен, полученный при аутентификации пользователя. Закрытие вкладки веб-браузера с запущенным приложением веб-клиента, как и завершение работы клиентского приложения, не приводит к завершению сеанса аутентификации. При работе в веб-клиенте после завершения сеанса аутентификации будет выполнен переход на стандартную страницу завершения сеанса.
- Provideconfig – описание настроек провайдера в виде JSON-файла, если провайдер не поддерживает запрос на получение настроек. Данные должны быть представлены в формате OpenID Provider Metadata (https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata).
- clientconfig – клиентская конфигурация в виде JSON-файла. Формат этой информации соответствует формату OAuth 2.0 Authorization Request (https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest), к которому добавляется свойство authority, содержащее URL провайдера аутентификации. Содержимое этого свойства зависит от используемого провайдера.
Свойство redirect_uri структуры clientconfig содержит URL перехода к обработчику аутентификации приложения, которое отправило запрос на эту аутентификацию. Обычно URL имеет следующий вид: https://IBhost/IBname/authform.html, где:
- IBhost – имя хоста, на котором опубликована информационная база;
- IBname – имя опубликованной информационной базы, то есть содержимое поля Name/Имя диалога публикации информационной базы или аналогичное значение при другом способе публикации.
- dialect – определяет протокол, который будет использоваться для взаимодействия с провайдером. Это необязательный атрибут: при его отсутствии для взаимодействия с провайдером будет использоваться протокол OpenID Connect v1.0.
crypto – содержит структуру, описывающую модуль криптографии, используемый для подписания запросов. Подписывать отправляемые запросы необходимо при использовании для взаимодействия с провайдером протокола ЕСИА. Структура содержит следующие свойства:
- module_name – имя модуля криптографии;
- module_path – путь к модулю криптографии;
- module_type – тип модуля криптографии;
- cert_thumbprint – отпечаток сертификата, который будет использоваться для подписания запросов. По отпечатку будет выполнен поиск сертификата. Сертификат должен быть предварительно размещен в хранилище личных сертификатов.
- Поля структуры, размещенной в свойстве crypto, аналогичны параметрам конструктора объекта CryptoManager/МенеджерКриптографии.
Пример указания провайдеров:
<openidconnect>
<providers><![CDATA[[
{
"name": "google",
"title": "Google",
"discovery": "https://accounts.google.com/.well-known/openid-configuration",
"authenticationClaimName": "email",
"clientconfig": {
"authority": "https://accounts.google.com/",
"client_id": "<идентификатор клиента>",
"redirect_uri": "https://localhost/openidc/authform.html",
"response_type": "id_token token",
"scope": "openid email",
"filterProtocolClaims": true,
"loadUserInfo": false
}
},
{
"name": "microsoft",
"title": "Microsoft",
"authenticationUserPropertyName" : "OSUser",
"image": "data:image/png;base64,………",
"discovery": "https://login.microsoftonline.com/<ідентифікатор клиента>/.well-known/openid-configuration",
"clientconfig": {
"authority": "https://login.microsoftonline.com/<ідентифікатор клиента>/",
"client_id": "<идентификатор клиента>",
"redirect_uri": "https://localhost/openidc/authform.html",
"response_type": "id_token token",
"scope": "openid email"
}
},
{
"name": "googleII",
"title": "Another Google",
"providerconfig": {
"issuer": "https://accounts.google.com",
"authorization_endpoint": "https://accounts.google.com/o/oauth2/v2/auth",
"token_endpoint": "https://www.googleapis.com/oauth2/v4/token",
"response_types_supported": ["code","token"],
"scopes_supported": ["openid","email","profile"]
},
"clientconfig": {
"authority": "https://accounts.google.com/",
"client_id": "<идентификатор клиента>",
"redirect_uri": «https://localhost/openidc/authform.html",
"response_type": "id_token token",
"scope": "openid email"
}
}
]]]>
</providers>
<allowStandardAuthentication>true</allowStandardAuthentication>
</openidconnect>
Элемент <allowStandardAuthentication>
Элемент определяет возможность применения аутентификации системы BAS. Если для этого элемента установлено false, на форме аутентификации при попытке входа в веб-клиент будет доступна аутентификация только с помощью провайдеров, описанных в файле default.vrd.
Элемент может иметь следующие значения:
- true – аутентификация системы BAS разрешена. Значение по умолчанию.
- false – аутентификация системы BAS запрещена.
Сценарий работы
Аутентификация с помощью провайдера OpenID Connect доступна только при указании параметров одного или нескольких провайдеров в файле default.vrd. При попытке использовать клиентское приложение (тонкий клиент или веб-клиент) для доступа к информационной базе выполняются следующие действия:
- Если в командной строке клиентского приложения явно указан провайдер, выполняется переход в соответствии с параметрами, указанными в файле default.vrd для этого провайдера.
- Иначе формируется форма запуска, в зависимости от клиентского приложения, на которой размещены все настроенные в файле default.vrd провайдеры OpenID Connect. В зависимости от настроек на этой странице может быть кнопка доступа с помощью стандартной аутентификации BAS.
- После выбора провайдера пользователь перенаправляется на страницу аутентификации выбранного провайдера. На этой странице пользователь аутентифицируется у выбранного провайдера любым доступным для этого провайдера способом.
- Затем провайдер перенаправляет пользователя на специальную страницу системы, передавая в качестве «параметра» JSON-файл (JSON Web Token, JWT) с результатами аутентификации. Адрес этой страницы указан в свойстве redirect_uri структуры clientconfig элемента provider.
- С помощью результатов аутентификации, переданных провайдером, система получает от провайдера ключевой параметр для идентификации пользователя. По умолчанию этим параметром является адрес электронной почты пользователя, но с помощью файла default.vrd его можно переопределить.
- Полученный адрес электронной почты используется для поиска пользователя в информационной базе системы. Поиск выполняется по свойству пользователя Name/Имя или OSUser/ПользовательОС. Необходимость использования для поиска свойства OSUser/ПользовательОС должна быть явно указана с помощью файла default.vrd.
- После этого аутентификация считается успешно завершенной, а приложение продолжает запускаться.
- В случае неуспешной аутентификации у провайдера дальнейшие действия провайдера не определены.