Как использовать не-JDBC-соединитель в пользовательской точке информации о политике (PIP)
Я хочу, чтобы моя пользовательская информационная точка политики (PIP) могла подключаться к OpenStack Swift (приложение для хранения объектов) благодаря этому соединителю. Соединитель может извлекать метаданные из объекта, которые будут отправлены обратно в точку принятия решения о политике (PDP), когда AttributeId
запрашивается
В нашем контексте Swift содержит информацию о наших ресурсах (объекты здесь).
Ниже приведены все шаги, которые я выполнил, чтобы попробовать и использовать этот разъем в моем пользовательском PIP.
Я получил разъем для работы локально (пока нет интеграции с WSO2IS), выполнив только первые 3 шага и вызвав swift_test
функция в основном классе для отладки.
Я следовал этому руководству, чтобы реализовать пользовательский PIP, который предлагает использовать базу данных с драйвером JDBC (например, mariadb). Моя проблема заключается в том, что Swift не предлагает драйвер JDBC, следовательно, используется разъем openstack4j.
Я добавил необходимую зависимость openstack4j в проект maven, указанный в руководстве ( здесь).
Я также добавил следующий импорт в расширенный класс (в руководстве он называется KMarketJDBCAttributeFinder):
package org.xacmlinfo.xacml.pip.jdbc;
import org.openstack4j.api.OSClient.OSClientV3;
import org.openstack4j.model.common.Identifier;
import org.openstack4j.model.storage.object.SwiftAccount;
import org.openstack4j.model.storage.object.SwiftContainer;
import org.openstack4j.model.storage.object.SwiftObject;
import org.openstack4j.model.storage.object.options.ObjectListOptions;
import org.openstack4j.openstack.OSFactory;
import org.wso2.carbon.identity.entitlement.pip.AbstractPIPAttributeFinder;
...
и эта функция для проверки и получения метаданных объекта:
public void swift_test() {
OSClientV3 os = OSFactory.builderV3()
.endpoint(our_keystoneV3_url)
.credentials(our_keystone_username, password, domain_identifier)
.scopeToProject(Identifier.byName(our_tenant), Identifier.byName(our_domain))
.authenticate();
SwiftAccount account = os.objectStorage.account().get();
Map<String, String> md =
os.objectStorage.objects().getMetadata("our_container", "our_object");
System.out.println(md.toString());
}
который я называю переопределенным getAttributeValues
пользовательского класса PIP.
Затем я построил класс, используя
mvn package
генерировать.jar
который я скопировал в<IS_HOME>/repository/components/lib
,Я загрузил все свои зависимости, используя
mvn dependency:copy-dependencies
и скопировал их всех в одно и то же<IS_HOME>/repository/components/lib
папка.Я запускаю сервер wso2is, отправляю запрос XACML, который включает в себя вызов моего пользовательского PIP, и вижу следующую ошибку в
<IS_HOME>/repository/logs/wso2carbon.log
:
ERROR {org.openstack4j.core.transport.internal.HttpExecutor} - No OpenStack4j connector found in classpath
ERROR {org.wso2.carbon.identity.entitlement.pip.CarbonAttributeFinder} - Error while retrieving attribute values from PIP attribute finder: org.openstack4j.api.exceptions.ConnectorNotFoundException: No OpenStack4j connector found in classpath
ERROR {org.wso2.balana.finder.AttributeFinder} - Error while trying to resolve values: Error while retrieving attribute values from PIP attribute finder: No OpenStack4j connector found in classpath
Наш сервер wso2is версии 5.7.0 работает на виртуальной машине CentOS 7.6.
Мой вопрос: можем ли мы использовать этот тип разъема в пользовательском PIP с wso2is? Если так, как бы я решил проблему с classpath между моими зависимостями?
PS: Ранее я добавил еще один пользовательский PIP, на этот раз подключившись к базе данных MariaDB, которая работает хорошо. .jar
Я создаю при использовании mvn package
содержит оба пользовательских PIP, и они оба распознаются в разделе "PDP > Extension" в веб-интерфейсе wso2is.
Вот список зависимостей, полученных с помощью команды mvn:
activation-1.1.1.jar
btf-1.2.jar
classworlds-1.1-alpha-2.jar
commons-codec-1.9.jar
commons-io-2.3.jar
commons-lang-2.6.jar
commons-logging-1.2.jar
guava-20.0.jar
httpclient-4.5.3.jar
httpcore-4.4.6.jar
jackson-annotations-2.7.0.jar
jackson-core-2.7.3.jar
jackson-core-asl-1.9.7.jar
jackson-coreutils-1.6.jar
jackson-databind-2.7.3.jar
jackson-dataformat-yaml-2.7.3.jar
jackson-jaxrs-base-2.7.3.jar
jackson-jaxrs-json-provider-2.7.3.jar
jackson-mapper-asl-1.9.7.jar
jackson-module-jaxb-annotations-2.7.3.jar
jboss-annotations-api_1.2_spec-1.0.0.Final.jar
jboss-jaxrs-api_2.0_spec-1.0.1.Beta1.jar
jboss-logging-3.3.0.Final.jar
jcip-annotations-1.0.jar
jcl-over-slf4j-1.7.2.jar
jdom2-2.0.6.jar
joss-0.10.2.jar
json-patch-1.9.jar
jsr305-2.0.0.jar
junit-3.8.1.jar
maven-artifact-2.0.jar
maven-compiler-plugin-2.0.jar
maven-plugin-api-2.0.jar
msg-simple-1.1.jar
openstack4j-3.1.0.jar
openstack4j-core-3.1.0.jar
openstack4j-resteasy-3.1.0.jar
org.wso2.carbon.identity.entitlement-4.2.0.jar
plexus-compiler-api-1.5.1.jar
plexus-compiler-javac-1.5.1.jar
plexus-compiler-manager-1.5.1.jar
plexus-container-default-1.0-alpha-8.jar
plexus-utils-1.0.4.jar
resteasy-client-3.1.4.Final.jar
resteasy-jaxrs-3.1.4.Final.jar
resteasy-jaxrs-services-3.1.4.Final.jar
slf4j-api-1.7.2.jar
snakeyaml-1.15.jar