Как использовать не-JDBC-соединитель в пользовательской точке информации о политике (PIP) - PullRequest
1 голос
/ 23 апреля 2019

Я хочу, чтобы моя пользовательская точка информации о политике (PIP) могла подключаться к OpenStack Swift (приложение для хранения объектов) благодаря этому разъему .Соединитель может извлекать метаданные из объекта, которые будут отправлены обратно в точку принятия решения (PDP), когда запрашивается право AttributeId.
В нашем контексте Swift содержит информацию о наших ресурсах (объекты здесь),

Ниже приведены все шаги, которые я выполнил, чтобы попытаться использовать этот разъем в моем пользовательском PIP.

Я получил разъем для локальной работы (пока без интеграции с WSO2IS), выполнив только первые 3 шагаи вызов функции swift_test в основном классе, предназначенном для отладки.

  1. Я следовал этому руководству для реализации пользовательского PIP, который предлагает использовать базу данных, предлагающуюДрайвер JDBC (такой как mariadb).Моя проблема заключается в том, что Swift не предлагает драйвер JDBC, следовательно, используется разъем openstack4j.

  2. Я добавил необходимую зависимость openstack4j к проекту maven, связанному в руководстве ( здесь ).

  3. Я такжедобавлен следующий импорт в расширенный класс (с именем 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
...