May 31, 2011

Интеграция Oracle Identity Manager 11g и Oracle ESSO 11.1.1.2 при помощи OIM Remote Manager

Short introduction: here you can find a short guide, how to integrate OIM 11g & OESSO 11g using OIM Remote Manager and ESSO connector provided.

Внимание! Статья изменена и внесены существенные корректировки.

Основная статья-гайд по интеграции Oracle Identity Manager и ESSO располагается в лабораторных работах по OIM9.1 & ESSO (работы 12 и 13), здесь же рассмотрим особенности интеграции новых версий – Oracle Identity Manager 11g (11.1.1.3.0.3) и Oracle Enterprise Single Sign-on 11g (11.1.1.2.0). Несмотря на то, что формально коннектор ESSO к OIM версию OIM 11g не поддерживает, интеграция возможна и не существенно отличается от ранее проведенной.



Рассмотрим изменения в продуктах, коснувшиеся технологии интеграции. OIM 11g использует новый Oracle Weblogic Server, с которым уже идут некоторые библиотеки (но других версий), используемые коннектором. И если делать все по инструкции, приведенной в документации к коннектору, то вы получите следующую ошибку:

"The add_credential execution failed. Error: Error in sending instruction from provisioning manager in Api Command (400) Bad Request. Add Credential Command failed to get invoked".
При этом на стороне ESSO в Windows Event Viewer вы увидите ошибку:

"Unexpected end tag. Line 6, position 1015", "server cannot clear headers after http headers have been sent".
Если снять пакет, передаваемый клиентом на сервер, то будет видно, что передается некорректный XML, характеризуемый неверным последним закрывающим тэгом "</#document>". Если посмотреть пакет, отправляемый при интеграции с OIM9.1.X, то там этого тэга не будет. По видимому, данная ошибка связана с несовместимостью версий библиотек, используемых Oracle Weblogic 10.3.3 (11g) или OIM 11g с библиотеками, используемыми коннектором ESSO.

Кроме того, в коннекторе, поставляемым с ESSO 11g, реализована функция выноса файла конфигурации PMClientConfiguration.properties из JAR-файла коннектора на файловую систему. И сигнатура методов поменялась – добавился новый входящий параметр, указывающий на расположение этого файла. Поэтому в инструкции, приведенные в работах 12 и 13, необходимо добавить новый параметр при настройке маппинга коннектора (является последним параметром, передаваемый в методы, следом за Service Password).

Вторую задачу решить несложно – достаточно указать в качестве последнего параметра расположение файла (полный путь – например, '/home/oracle/PMClientConfiguration.properties'), но для решения проблемы несовместимости библиотек, необходимо заставить коннектор использовать именно те библиотеки, которые совместимы с коннектором. Просто указать библиотеки в скрипте запуска (например, startWeblogic.sh) не получается, так как используемая коннектором к ESSO библиотека xerces.jar несовместима с аналогичной библиотекой OIM, используемой для внутренних нужд и часть функционала OIM перестает работать.

Следовательно, нам необходимо запускать код коннектора в независимом процессе, обладающим собственным CLASSPATH. Один из вариантов – использовать компонент OIM под названием Remote Manager. Подробно компонент рассмотрен в документации, здесь же перечислю основные шаги, которые пришлось сделать для реализации интеграции OIM 11g и ESSO. Предполагается, что Remote Manager установлен на ту же машину, что и OIM в папку $OIM_ORACLE_HOME/remote_manager (например, '/home/oracle/Oracle/Middleware/Oracle_IDM1/remote_manager'). Принципиальная схема интеграции показана на рисунке ниже.



Далее:
$OIM_ORACLE_HOME – путь до установки OIM (например, /home/oracle/Oracle/Middleware/Oracle_IDM1)
$RM_HOME - путь до установки Remote Manager (например, '/home/oracle/Oracle/Middleware/Oracle_IDM1/remote_manager')
$WLS_HOME – путь до установки Weblogic Server (например, '/home/oracle/Oracle/Middleware/wlserver_10.3')
$JAVA_HOME – путь до установки JVM, при помощи которой запускается WLS с OIM (например, '/home/oracle/Oracle/Middleware/jrockit_160_17_R28.0.0-679')
$DOMAIN_HOME – путь до домена Weblogic Server, в рамках которого выполняется приложение OIM (например, '/home/oracle/Oracle/Middleware/user_projects/domains/oim_domain').

1. Конфигурируем Remote Manager через скрипт $OIM_ORACLE_HOME/bin/config.sh / cmd. Должно образоваться хранилище ключей (пароль задается при конфигурировании), значение пароля прописываем в конфигурационном файле $RM_HOME/config/xlconfig.xml

2. Импортируем сертификат $RM_HOME/config/xlserver.cert в хранилища: JVM (на которой выполняется OIM), Weblogic Server, и OIM:

Примеры команд:

Хранилище JVM (пароль по умолчанию – 'changeit'):
$JVM_HOME/jre/bin/keytool –import –keystore $JAVA_HOME/jre/lib/security/cacerts –file $RM_HOME/config/xlserver.cert –storepass changeit

Хранилище Weblogic Server (пароль по умолчанию – ' DemoTrustKeyStorePassPhrase'):
$JVM_HOME/jre/bin/keytool –import –keystore $WLS_HOME/server/lib/DemoTrust.jks –file $RM_HOME/config/xlserver.cert –storepass DemoKeyStorePassPhrase

Хранилище OIM (пароль задавался при конфигурировании OIM):
$JVM_HOME/jre/bin/keytool –import –keystore $DOMAIN_HOME/config/fmwconfig/default-keystore.jks –file $RM_HOME/config/xlserver.cert –storepass yourpass

3. Прописываем библиотеки в CLASSPATH Remote Manager в файле remotemanager.sh (как альтернатива, можно попробовать их все скопировать в $RM_HOME/JavaTasks). Например:

CLASSPATH="/home/oracle/Oracle/Middleware/libs/activation.jar:${CLASSPATH}"
export CLASSPATH

CLASSPATH="/home/oracle/Oracle/Middleware/libs/axis-1.2.1.jar:${CLASSPATH}"
export CLASSPATH

CLASSPATH="/home/oracle/Oracle/Middleware/libs/axis-ant-1.2.1.jar:${CLASSPATH}"
export CLASSPATH

CLASSPATH="/home/oracle/Oracle/Middleware/libs/bcprov-jdk13-128.jar:${CLASSPATH}"
export CLASSPATH

CLASSPATH="/home/oracle/Oracle/Middleware/libs/com.oracle.ws.orawsdl_1.2.0.0.jar:${CLASSPATH}"
export CLASSPATH

CLASSPATH="/home/oracle/Oracle/Middleware/libs/commons-discovery-0.2.jar:${CLASSPATH}"
export CLASSPATH

CLASSPATH="/home/oracle/Oracle/Middleware/libs/commons-logging-1.0.4.jar:${CLASSPATH}"
export CLASSPATH

CLASSPATH="/home/oracle/Oracle/Middleware/libs/EncryptionTool.jar:${CLASSPATH}"
export CLASSPATH

CLASSPATH="/home/oracle/Oracle/Middleware/libs/jaxp-api.jar:${CLASSPATH}"
export CLASSPATH

CLASSPATH="/home/oracle/Oracle/Middleware/libs/jaxrpc.jar:${CLASSPATH}"
export CLASSPATH

CLASSPATH="/home/oracle/Oracle/Middleware/libs/mail.jar:${CLASSPATH}"
export CLASSPATH

CLASSPATH="/home/oracle/Oracle/Middleware/libs/opensaml-1.0.1.jar:${CLASSPATH}"
export CLASSPATH

CLASSPATH="/home/oracle/Oracle/Middleware/libs/PMAPIInvoker_6.0.jar:${CLASSPATH}"
export CLASSPATH

CLASSPATH="/home/oracle/Oracle/Middleware/libs/PMCLI.jar:${CLASSPATH}"
export CLASSPATH

CLASSPATH="/home/oracle/Oracle/Middleware/libs/saaj.jar:${CLASSPATH}"
export CLASSPATH

CLASSPATH="/home/oracle/Oracle/Middleware/libs/wss4j.jar:${CLASSPATH}"
export CLASSPATH

CLASSPATH="/home/oracle/Oracle/Middleware/libs/xalan.jar:${CLASSPATH}"
export CLASSPATH

CLASSPATH="/home/oracle/Oracle/Middleware/libs/xercesImpl.jar:${CLASSPATH}"
export CLASSPATH

CLASSPATH=/home/oracle/Oracle/Middleware/libs/xmlsec-1.3.0.jar:${CLASSPATH}
export CLASSPATH

CLASSPATH=/home/oracle/Oracle/Middleware/libs/OIMConnector6.0.jar:${CLASSPATH}
export CLASSPATH

echo ${CLASSPATH}


Предполагается, что указанные библиотеки предварительно были скопированы в '/home/oracle/Oracle/Middleware/libs'). Кроме того, возможна ситуация, когда подобная загрузка заставляет коннектор ESSO искать файл PMClientConfiguration.properties в JAR-файлах загрузки, и в этому случае файл PMClientConfiguration.properties, передаваемый в параметрах метода AddCredential игнорируется. Самым простым решением оказалось установить параметры соединения в файле PMClientConfiguration.properties внутри JAR-файла OIMConnector6.0.jar (по пути 'com\passlogix\integration\provision\conf\apiclientconf'), его необходимо распаковать, отредактировать и запаковать обратно.

Пример установки параметров соединения с ESSO PG:

javaCLI.serviceurl=http://10.10.19.200/v-GO PM Service/UP.asmx
javaCLI.serviceuser=DOMAIN\SSOSERVICES
javaCLI.serviceuserpassword=p@ssw0rd



4. Создаем IT Resource для Remote Manager. Указываем service: RManager, url: rmi://ipaddr:12345 (не 12346, как описано в документации! OIM обратится на порт 12345 и самостоятельно перейдет на SSL-порт 12346).

5. Создаем новый тип IT Resource'а (любой), например, TestSRV. Указываем один параметр (например, str). Создаем новый инстанс этого IT Resource через административную консоль, указываем в параметрах на первом экране создания Remote Manager. Этот IT Resource нам необходимо передать в параметрах Remote задачи.

6. Создаем адаптер для задач (например, Add ESSO User Remote), в который добавляем задачу типа Remote. Выбираем класс OIMInterface из OIMConnector6.0.jar, соответствующий метод, нажимаем Save. Видим, что в качестве последнего параметра необходимо передать IT Resource. Заводим необходимые переменные, настраиваем маппинг переменных адаптера на входящие переменные метода. Заводим дополнительный параметр типа IT Resource: TestSRV (или какой вы выбрали), делаем его маппинг на входящий параметр IT Resource.

7. Создаем задачу в соответствующем процессе, например, Add Credentials Remote, автоматизируем ее соответствующим адаптером, в качестве IT Resource передаем инстанс созданного ранее IT Resource типа TestSRV.

В итоге интеграция завершилась удачно.

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

No comments:

Post a Comment