1

我已经制作了自己的 MongoDBPolicyProvider 并将其集成到 Authzforce 服务器中,但由于此异常,我无法启动 webapp(docker image fiware/authzforce-ce-server,release-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的过程,但我还没有成功。我将不胜感激这方面的任何帮助。

4

1 回答 1

0

AuthzForce Server 仅适用于StaticFlatFileDAORefPolicyProvider开箱即用。不过,我可以建议 2 个替代解决方法:

1)实现您自己的DomainsDao支持您的MongoDBBasedPolicyProviderDescriptor而不是 - 或除了 - StaticFlatFileDAORefPolicyProvider。您可以使用FlatFileBasedDomainsDao作为基础,因为这是 AuthzForce 服务器本机使用的。然后假设我们称这个新的实现MongoDBBasedDomainsDao。所以你需要更改Spring 配置/opt/authzforce-ce-server/webapp/WEB-INF/beans.xml:替换为org.ow2.authzforce.pap.dao.flatfile.FlatFileBasedDomainsDaoMongoDBBasedDomainsDao 的完全限定类名。并将您的实现类/JAR 和额外的依赖项添加到服务器类路径中,通常在/opt/authzforce-ce-server/webapp/WEB-INF/lib.

2) 其他选项:使用AuthzForce Restful PDP而不是 AuthzForce Server。它适用于任何 PolicyProvider。查看扩展部分了解更多信息。与解决方案1相比,主要优点:不需要额外的代码。但有两个缺点:a) 没有 PAP API。仍然可以轻松修改代码以添加您自己的 REST API 以满足您的需要。b) PDP API 不是多租户的。如果您想要多个具有单独 PDP 的租户/域,则需要多个服务器实例(每个域 1 个)。

于 2019-04-19T17:25:50.867 回答