我已经制作了自己的MongoDBPolicyProvider,并将其集成到Authzforce服务器中,但是由于以下异常,我无法启动Web应用程序(docker image fiware / authzforce-ce-server,发行版8.1.0):
java.lang.RuntimeException: Invalid PDP configuration of domain 'YAT-5z9ZEemGyAJCrBEAAg' in file '/opt/authzforce-ce-server/data/domains/YAT-5z9ZEemGyAJCrBEAAg/pdp.xml': refPolicyProvider is not an instance of class org.ow2.authzforce.pap.dao.flatfile.xmlns.StaticFlatFileDAORefPolicyProvider as expected.
我认为以某种方式仍在尝试从
StaticFlatFileDAORefPolicyProvider
策略提供者检索策略。扩展名的.jar在服务器的类路径中可见。
这是我的pdp配置文件:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<pdp
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://authzforce.github.io/core/xmlns/pdp/6.0"
xmlns:oa="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17"
version="6.0.0" enableXPath="false" strictAttributeIssuerMatch="false" maxVariableRefDepth="10" maxPolicyRefDepth="10">
<refPolicyProvider
id="refPolicyProvider"
xmlns:ext="PRP/mongoDB"
xsi:type="ext:MongoDBBasedPolicyProviderDescriptor"
serverHost="localhost" serverPort="27017" dbName="PRP" collectionName="policies" />
<rootPolicyProvider id="rootPolicyProvider" xsi:type="StaticRefBasedRootPolicyProvider">
<policyRef>root-rbac-policyset</policyRef>
</rootPolicyProvider>
</pdp>
这是MongoDBBasedPolicyProviderDescriptor:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "MongoDBBasedPolicyProviderDescriptor")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class MongoDBBasedPolicyProviderDescriptor extends AbstractPolicyProvider
{
@XmlAttribute(name = "serverHost", required = true)
protected String serverHost;
@XmlAttribute(name = "serverPort", required = true)
protected int serverPort;
@XmlAttribute(name = "dbName", required = true)
protected String dbName;
@XmlAttribute(name = "collectionName", required = true)
protected String collectionName;
}
我已经完成了两次集成PRP的过程,但是还没有成功。我将朝这个方向提供帮助。
最佳答案
AuthzForce Server仅与现成的StaticFlatFileDAORefPolicyProvider
一起使用。不过,我可以建议2种替代解决方法:
1)实现自己的DomainsDao来支持MongoDBBasedPolicyProviderDescriptor
,而不是-或除了-StaticFlatFileDAORefPolicyProvider
。您可以使用FlatFileBasedDomainsDao作为基础,因为这是AuthzForce Server本机使用的。然后,假设我们将此新实现称为MongoDBBasedDomainsDao
。因此,您需要更改/opt/authzforce-ce-server/webapp/WEB-INF/beans.xml
中的Spring configuration:用MongoDBBasedDomainsDao的完全限定的类名替换org.ow2.authzforce.pap.dao.flatfile.FlatFileBasedDomainsDao
。并将您的实现类/ JAR和其他依赖项添加到服务器类路径中,通常在/opt/authzforce-ce-server/webapp/WEB-INF/lib
中。
2)其他选项:使用AuthzForce Restful PDP代替AuthzForce Server。它可与任何PolicyProvider一起使用。检查Extensions section for more info。与解决方案1相比,主要优点是:不需要额外的代码。但是有两个缺点:a)没有PAP API。仍然可以轻松修改代码,以根据需要添加自己的REST API。
b)PDP API不是多租户。如果要使用单独的PDP的多个租户/域,则需要多个服务器实例(每个域1个)。