由于OpenStack Swift,我希望我的自定义策略信息点(PIP)能够连接到this connector(对象存储应用程序)。连接器能够从对象检索元数据,当请求正确的AttributeId
时,该元数据将被发送回策略决策点(PDP)。
在我们的上下文中,Swift保留有关我们资源的信息(此处的对象)。
下面是我尝试在自定义PIP中使用此连接器的所有步骤。
仅按照前3个步骤并在用于调试的主类中调用swift_test
函数,即可使连接器在本地工作(尚未与WSO2IS集成)。
我遵循this guide来实现自定义PIP,这建议使用提供JDBC驱动程序的数据库(例如mariadb)。我的问题是,Swift不提供JDBC驱动程序,因此使用openstack4j连接器。
我在指南(here)中链接的maven项目中添加了所需的openstack4j依赖项。
我还将以下导入添加到扩展类(在指南中名为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());
}
我在自定义PIP类的重写getAttributeValues
中调用。
然后,我使用mvn package
构建了一个类,以生成.jar
,并将其复制到<IS_HOME>/repository/components/lib
中。
我使用mvn dependency:copy-dependencies
下载了所有依赖项,并将它们全部复制到相同的<IS_HOME>/repository/components/lib
文件夹中。
我启动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 VM上运行。
然后我的问题是:我们可以在带有wso2is的自定义PIP中使用这种连接器吗?如果是这样,我将如何解决我的依赖关系之间的类路径问题?
P.S。 :我以前添加了另一个自定义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