OpenMetabaseResult OpenMetabase(MbDef tDef, UserCreds tCreds, [OpenMetabaseArg tArg])
tDef. Описание репозитория, к которому осуществляется подключение.
tCreds. Параметры аутентификации пользователя.
tArg. Параметры подключения.
Операция OpenMetabase осуществляет подключение к репозиторию и возвращает моникёр соединения с репозиторием.
Операция позволяет выполнить следующие действия:
подключиться к существующему репозиторию и получить доступ к его объектам;
создать новый репозиторий на сервере СУБД.
Подключение к репозиторию может осуществляться различными способами. Для подключения необходимо указать информацию о репозитории и параметры аутентификации пользователя. Для указания репозитория, к которому осуществляется подключение, доступны следующие варианты:
В поле tDef.id укажите идентификатор описания репозитория. При выполнении операции в реестре операционной системы сервера, на котором расположен BI-сервер, производится поиск указанного описания. Если описание найдено, то его настройки будут использованы для подключения к репозиторию.
В поле tDef.logonData укажите параметры модуля безопасности, необходимые для подключения к репозиторию (драйвер СУБД, используемый для подключения, наименование или IP-адрес сервера, идентификатор схемы/базы данных). При этом в качестве идентификатора описания в поле tDef.id должна быть указана пустая строка.
Также, с помощью операции OpenMetabase может быть создано гостевое соединение. Более подробно читайте в статье «Использование гостевого подключения».
Для аутентификации пользователей доступны следующие способы (более подробное описание представлено ниже):
С прямым указанием учётных данных;
С аутентификацией доменного пользователя;
С использованием протокола OAuth;
С использованием цифровой подписи.
Параметры аутентификации указываются в поле tCreds.
Результатом выполнения операции будут:
моникёр соединения с репозиторием (поле id);
ключ сессии (поле sessKey);
идентификатор сессии (поле sessCookie);
версия репозитория (поле version).
Примечание. Параметры сессии хранятся в памяти BI-сервера или на сервере состояний, если в конфигурации определена группа настроек StateServer. Если группа настроек StateServer определена, но сам сервер состояний отключен, то идентификатор сессии сгенерирован не будет.
Полученный моникёр в дальнейшем будет использоваться в следующих случаях:
при выполнении различных операций для указания репозитория, в рамках которого осуществляется работа;
в поле id при формировании идентификатора объекта, с которым осуществляется работа;
при закрытии соединения с репозиторием с помощью операции CloseMetabase.
Ключ сессии sessKey может использоваться, например, при работе с протоколом доступа для получения списка операций, выполненных в рамках сессии.
Идентификатор sessCookie, в отличие от моникёра, не используется для работы с репозиторием, а используется только для идентификации существующих сессий на сервере. Если полученный идентификатор сохранить и в дальнейшем, при новом подключении, указать в качестве значения поля tArg.sessCookie, то на BI-сервере будет осуществлена проверка на наличие сессии с таким же идентификатором. Если сессия существует, то будет осуществлена проверка на возможность её повторного использования. Необходимыми условиями для повторного использования сессии являются:
корректные логин и пароль пользователя;
среди активных сессий ещё существует сессия с указанным идентификатором;
существующая сессия была создана именно для указанного пользователя.
В зависимости от выбранного типа аутентификации будут использоваться различные поля операции OpenMetabase. Также могут потребоваться дополнительные настройки, представленные ниже.
в реестре/файле settings.xml создайте раздел OAuth, внутри него создайте подраздел и задайте настройки, необходимые для работы с внешним сервисом аутентификации по протоколу OAuth 2.0.
в файле Metabases.xml создайте раздел для подключения к репозиторию, в качестве значения атрибута Authentication укажите значение 7. Внутри созданного раздела создайте подраздел OAuthService, в атрибуте Providers укажите наименование сервера аутентификации, которое было задано в реестре/файле settings.xml.
Подключение выполняется в несколько этапов с выполнением дополнительных операций:
Выполните операцию GetOAuthSettings, в поле tArg.svcKey укажите значение -1. В результате операции будет получен список внешних сервисов, созданных в подразделе OAuth в реестре/файле settings.xml. Для каждого элемента списка будет доступен идентификатор, ключ и пиктограмма - поля id, key и icon соответственно.
Выполните операцию 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-аутентификация будет невозможна.
Веб-приложение должно осуществить перенаправление по полученному адресу authUrl. Пользователь проходит аутентификацию на внешнем сервисе. При успешной аутентификации внешний сервис осуществляет обратное перенаправление в веб-приложение по адресу, который был задан в поле CreateOAuthState.tArg.redirectUri с указанием параметров code и state.
Выполните операцию GetOAuthToken, в поле tArg.svcKey укажите использованный ранее ключ сервиса аутентификации, в поле tArg.applicationUrl укажите путь до корня веб-приложения, который будет использоваться в качестве адреса возврата в приложение, значение должно быть равно указанному ранее в CreateOAuthState.tArg.redirectUri. В полях tArg.loginCode и tArg.state укажите значения полученных параметров code и state соответственно. При выполнении запроса BI-сервер проверит значение параметра для защиты от потенциальных CSRF-атак при получении кода авторизации. В случае успешной проверки произойдет обращение к внешнему сервису для получения токенов. BI-сервер вернёт ключ для использования токенов. Данный ключ будет доступен в поле oauth_token результата выполнения операции и далее может быть передан в операцию OpenMetabase.
Выполните операцию OpenMetabase, в поле tCreds.oauth.oauth_token укажите полученный ключ для использования токенов, в поле tCreds.oauth.oauth_verifier пустое значение, а в поле tCreds.oauth.svcKey использованный ранее ключ сервиса аутентификации, в поле tCreds.pass также укажите пустое значение. В поле tDef.id укажите идентификатор репозитория.
При успешном выполнении всех действий будет осуществлено подключение к репозиторию.
в реестре необходимо сохранить зашифрованный пароль, который будет использоваться для подключения к базе данных репозитория. Для этого запустите утилиту PP.Util с ключом /save_creds <ID описания репозитория> <имя пользователя>. Утилита расположена в папке с установленным «Форсайт. Аналитическая платформа». После успешного запуска будет запрошен пароль. Введите пароль. После этого будет выведено сообщение «Password for metabase “ID описания репозитория” and login “имя пользователя” saved»;
сохраните сертификат в репозиторий используя следующую команду: PP.Util.exe /save_cert "путь до сертификата" <ID описания репозитория> <имя пользователя>. После этого утилита запросит пароль указанного пользователя. Полученные учётные данные будут использованы для подключения к репозиторию. При удачной авторизации и сохранении сертификата будет выведено сообщение: Certificate from file "путь до сертификата" with identifier "ID сертификата" saved to metabase "ID описания репозитория";
сохранить закрытый ключ в реестре используя следующую команду: PP.Util.exe /save_private_key "путь до ключа" <ID сертификата> <алгоритм шифрования := gos|pro, если не указан, то gos>. После удачного сохранения закрытого ключа будет выведено сообщение: "Certificate from file "путь до ключа" with identifier "ID сертификата" saved".
Примечание. Если 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 задается пустая строка, данное поле не используется при подключении с использованием цифровой подписи.
В репозитории может быть установлен обработчик пользовательских событий, который будет обрабатывать действия, выполняемые из веб-сервиса. Для этого необходимо задать следующие настройки:
Свойству IMetabaseDefinition.CheckCustomEvents установить значение True.
Для репозитория установить специальный объект MetabaseSpecialObject.MetabaseCustomEvents, в качестве объекта указывается модуль, содержащий реализацию интерфейса IMetabaseCustomEvents.
При выполнении операции OpenMetabase будет выполнен следующий алгоритм:
Если IMetabaseDefinition.CheckCustomEvents = False, то открывается соединение в соответствии с переданными учётными данными и возвращается моникёр соединения.
Если IMetabaseDefinition.CheckCustomEvents = True, то открывается соединение с учётными данными, которые должны быть сохранены утилитой PP.Util. Если сохранённые учётные данные отсутствуют, то генерируется исключительная ситуация.
Запускается на выполнение специальный объект, который должен быть задан в репозитории. Если он не задан или в нём отсутствует реализация интерфейса IMetabaseCustomEvents, то генерируется исключительная ситуация.
В событие OnBeforeLogon передаются учётные данные, которые были переданы в операцию OpenMetabase. Далее, в соответствии с прикладной логикой, в обработчике события можно произвести какие-либо действия. Результирующее соединение должно быть задано в свойстве ResultMetabase аргумента события, моникёр этого соединения будет возвращён в результате операции. Если по каким-либо причинам в обработчике события свойству AllowLogon аргумента события было установлено значение False, то в результате операции будет сгенерирована исключительная ситуация.
Различные варианты использования операции приведены в следующих примерах:
См. также: