1

由于这个连接器,我希望我的自定义策略信息点 (PIP) 能够连接到OpenStack Swift (一个对象存储应用程序) 。连接器能够从对象中检索元数据,在请求权限时将元数据发送回策略决策点 (PDP) 。 在我们的上下文中,Swift 保存有关我们资源(此处为对象)的信息。 AttributeId

以下是我尝试在自定义 PIP 中使用此连接器的所有步骤。

我只按照前 3 个步骤让连接器在本地工作(尚未与 WSO2IS 集成),并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 类的覆盖中调用它。

  1. 然后我构建了mvn package用于生成.jar我复制的类<IS_HOME>/repository/components/lib

  2. 我使用 下载了所有依赖项mvn dependency:copy-dependencies,并将它们全部复制到同一个<IS_HOME>/repository/components/lib文件夹中。

  3. 我启动 wso2is 服务器,发送一个涉及调用我的自定义 PIP 的 XACML 请求,并在中看到以下错误<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 虚拟机上运行。

那么我的问题是:我们可以在带有 wso2is 的自定义 PIP 中使用这种连接器吗?如果是这样,我将如何解决我的依赖项之间的类路径问题?

PS:我之前添加了另一个自定义 PIP,这次连接到运行良好的 MariaDB 数据库。.jar我在使用时创建的mvn package包含两个自定义 PIP,并且它们都在 wso2is Web 界面的“PDP > 扩展”部分中被识别。

以下是使用 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
4

0 回答 0