OpenMetabase

Синтаксис

OpenMetabaseResult OpenMetabase(MbDef tDef, UserCreds tCreds, [OpenMetabaseArg tArg])

Параметры

tDef. Описание репозитория, к которому осуществляется подключение.

tCreds. Параметры аутентификации пользователя.

tArg. Параметры подключения.

Описание

Операция OpenMetabase осуществляет подключение к репозиторию и возвращает моникёр соединения с репозиторием.

Комментарии

Операция позволяет выполнить следующие действия:

Подключение к репозиторию может осуществляться различными способами. Для подключения необходимо указать информацию о репозитории и параметры аутентификации пользователя. Для указания репозитория, к которому осуществляется подключение, доступны следующие варианты:

Также, с помощью операции OpenMetabase может быть создано гостевое соединение. Более подробно читайте в статье «Использование гостевого подключения».

Для аутентификации пользователей доступны следующие способы (более подробное описание представлено ниже):

Параметры аутентификации указываются в поле tCreds.

Результатом выполнения операции будут:

Примечание. Параметры сессии хранятся в памяти BI-сервера или на сервере состояний, если в конфигурации определена группа настроек StateServer. Если группа настроек StateServer определена, но сам сервер состояний отключен, то идентификатор сессии сгенерирован не будет.

Полученный моникёр в дальнейшем будет использоваться в следующих случаях:

Ключ сессии sessKey может использоваться, например, при работе с протоколом доступа для получения списка операций, выполненных в рамках сессии.

Идентификатор sessCookie, в отличие от моникёра, не используется для работы с репозиторием, а используется только для идентификации существующих сессий на сервере. Если полученный идентификатор сохранить и в дальнейшем, при новом подключении, указать в качестве значения поля tArg.sessCookie, то на BI-сервере будет осуществлена проверка на наличие сессии с таким же идентификатором. Если сессия существует, то будет осуществлена проверка на возможность её повторного использования. Необходимыми условиями для повторного использования сессии являются:

Способы аутентификации

В зависимости от выбранного типа аутентификации будут использоваться различные поля операции OpenMetabase. Также могут потребоваться дополнительные настройки, представленные ниже.

Для подключения с прямой передачей учётных данных укажите имя пользователя и пароль в полях tCreds.user и tCreds.pass соответственно.
Для использования интегрированной доменной аутентификации пользователя поле tCreds.user не указывается, а в поле tCreds.pass необходимо указать пустое значение. При этом для подключения будут переданы учётные данные текущего пользователя операционной системы.
Для подключения с использованием протокола OAuth необходимо предварительно подготовить репозиторий следующим образом:

Подключение выполняется в несколько этапов с выполнением дополнительных операций:

  1. Выполните операцию GetOAuthSettings, в поле tArg.svcKey укажите значение -1. В результате операции будет получен список внешних сервисов, созданных в подразделе OAuth в реестре/файле settings.xml. Для каждого элемента списка будет доступен идентификатор, ключ и пиктограмма - поля id, key и icon соответственно.

  2. Выполните операцию CreateOAuthState, в поле tArg.svcKey укажите ключ сервиса аутентификации, а в поле tArg.redirectUri путь до корня веб-приложения, который будет использоваться в качестве адреса возврата в приложение после ввода учётных данных пользователя на внешнем сервисе. Во время выполнения операции BI-сервер сгенерирует параметр state для защиты от потенциальных атак типа CSRF при получении кода авторизации. Результатом выполнения операции будет адрес сервиса аутентификации, который задан в настройках сервиса в реестре/файле settings.xml в поле AuthUrl, дополненный адресом возврата из tArg.redirectUri и сгенерированным параметром state. Адрес, указанный в tArg.redirectUri, должен быть прописан в настройках внешнего сервиса аутентификации. В ответе через заголовок Set-Cookie BI-сервер устанавливает в браузере cookie со значением параметра state. Cookie имеет время жизни 5 минут, имеет атрибуты HttpOnly и Secure.

Важно. Cookie с атрибутом Secure передаются только по HTTPS-соединению, поэтому взаимодействие BI-сервера и веб-приложения обязательно должны быть настроены на работу по HTTPS, иначе OAuth-аутентификация будет невозможна.

  1. Веб-приложение должно осуществить перенаправление по полученному адресу authUrl. Пользователь проходит аутентификацию на внешнем сервисе. При успешной аутентификации внешний сервис осуществляет обратное перенаправление в веб-приложение по адресу, который был задан в поле CreateOAuthState.tArg.redirectUri с указанием параметров code и state.

  2. Выполните операцию GetOAuthToken, в поле tArg.svcKey укажите использованный ранее ключ сервиса аутентификации, в поле tArg.applicationUrl укажите путь до корня веб-приложения, который будет использоваться в качестве адреса возврата в приложение, значение должно быть равно указанному ранее в CreateOAuthState.tArg.redirectUri. В полях tArg.loginCode и tArg.state укажите значения полученных параметров code и state соответственно. При выполнении запроса BI-сервер проверит значение параметра для защиты от потенциальных CSRF-атак при получении кода авторизации. В случае успешной проверки произойдет обращение к внешнему сервису для получения токенов. BI-сервер вернёт ключ для использования токенов. Данный ключ будет доступен в поле oauth_token результата выполнения операции и далее может быть передан в операцию OpenMetabase.

  3. Выполните операцию OpenMetabase, в поле tCreds.oauth.oauth_token укажите полученный ключ для использования токенов, в поле tCreds.oauth.oauth_verifier пустое значение, а в поле tCreds.oauth.svcKey использованный ранее ключ сервиса аутентификации, в поле tCreds.pass также укажите пустое значение. В поле tDef.id укажите идентификатор репозитория.

При успешном выполнении всех действий будет осуществлено подключение к репозиторию.

Для подключения с использованием цифровой подписи необходимо предварительно подготовить репозиторий следующим образом:

Примечание. Если BI-сервер установлен на веб-сервере IIS, то пул BI-сервера должен быть запущен из-под того пользователя, под которым запускали утилиту PP.Util.

Перед подключением необходимо выполнить операцию GetVerifierCode для получения блока данных, которые клиент должен будет подписать цифровой подписью. Подписанные данные необходимо указать в поле tCreds.verifier.signature, в поле tCreds.verifier.cookie необходимо указать случайное число, которое также будет получено в результате выполнения операции GetVerifierCode. В поле tCreds.verifier.user указывается пользователь, под которым осуществляется подключение. Этот пользователь может отсутствовать в СУБД репозитория и менеджере безопасности.

Примечание. Если указан пользователь, который отсутствует везде, то он будет создан в менеджере безопасности репозитория. Если было задано поле tCreds.verifier.role, то пользователь будет включен в указанную группу и будет обладать соответствующими правами. Если поле не задано, то пользователь будет включен во встроенную группу ПОЛЬЗОВАТЕЛИ. При необходимости права созданного пользователя можно изменить с помощью операции SetMbSec.

В поле tCreds.verifier.mbUser укажите пользователя, под которым будет осуществляться фактическое подключение к базе данных репозитория. Данный пользователь должен существовать в СУБД и обладать правами на вход в репозиторий. Также в поле tCreds.verifier.certificate необходимо указать идентификатор сертификата, который будет использоваться для проверки цифровой подписи. Данный сертификат должен быть сохранён в репозитории таким образом, как это было описано выше. В поле tCreds.pass задается пустая строка, данное поле не используется при подключении с использованием цифровой подписи.

Отслеживание событий

В репозитории может быть установлен обработчик пользовательских событий, который будет обрабатывать действия, выполняемые из веб-сервиса. Для этого необходимо задать следующие настройки:

  1. Свойству IMetabaseDefinition.CheckCustomEvents установить значение True.

  2. Для репозитория установить специальный объект MetabaseSpecialObject.MetabaseCustomEvents, в качестве объекта указывается модуль, содержащий реализацию интерфейса IMetabaseCustomEvents.

При выполнении операции OpenMetabase будет выполнен следующий алгоритм:

  1. Если IMetabaseDefinition.CheckCustomEvents = False, то открывается соединение в соответствии с переданными учётными данными и возвращается моникёр соединения.

  2. Если IMetabaseDefinition.CheckCustomEvents = True, то открывается соединение с учётными данными, которые должны быть сохранены утилитой PP.Util. Если сохранённые учётные данные отсутствуют, то генерируется исключительная ситуация.

  3. Запускается на выполнение специальный объект, который должен быть задан в репозитории. Если он не задан или в нём отсутствует реализация интерфейса IMetabaseCustomEvents, то генерируется исключительная ситуация.

  4. В событие OnBeforeLogon передаются учётные данные, которые были переданы в операцию OpenMetabase. Далее, в соответствии с прикладной логикой, в обработчике события можно произвести какие-либо действия. Результирующее соединение должно быть задано в свойстве ResultMetabase аргумента события, моникёр этого соединения будет возвращён в результате операции. Если по каким-либо причинам в обработчике события свойству AllowLogon аргумента события было установлено значение False, то в результате операции будет сгенерирована исключительная ситуация.

Пример

Различные варианты использования операции приведены в следующих примерах:

Наименование примера
Подключение к репозиторию с прямой передачей учётных данных
Подключение к репозиторию с использованием цифровой подписи
Подключение к репозиторию с использованием интегрированной доменной аутентификации
Подключение к репозиторию с аутентификацией на внешнем сервисе

См. также:

Общие операции | Использование гостевого подключения