RuntimeException после добавления расширения поставщика политики MongoDB - PullRequest
1 голос
/ 18 марта 2019

Я сделал свой собственный MongoDBPolicyProvider и интегрировал его в сервер Authzforce, но я не могу запустить веб-приложение (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 расширения виден в classpath сервера.
  • Вот мой файл конфигурации 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дважды, но я пока не добился успеха.Буду признателен за любую помощь в этом направлении.

1 Ответ

0 голосов
/ 19 апреля 2019

AuthzForce Server работает только с StaticFlatFileDAORefPolicyProvider из коробки. Тем не менее, я могу предложить 2 альтернативных решения:

1) Реализуйте свой собственный DomainsDao , поддерживающий ваш MongoDBBasedPolicyProviderDescriptor вместо - или в дополнение к - StaticFlatFileDAORefPolicyProvider. Вы можете использовать FlatFileBasedDomainsDao в качестве основы, поскольку именно эта система используется AuthzForce Server изначально. Тогда, скажем, мы называем эту новую реализацию MongoDBBasedDomainsDao. Поэтому вам нужно изменить конфигурацию Spring в /opt/authzforce-ce-server/webapp/WEB-INF/beans.xml: заменить org.ow2.authzforce.pap.dao.flatfile.FlatFileBasedDomainsDao на полное имя класса MongoDBBasedDomainsDao. И добавьте ваш класс реализации / JAR и дополнительные зависимости в путь к классу сервера, обычно в /opt/authzforce-ce-server/webapp/WEB-INF/lib.

2) Другой вариант: используйте AuthzForce Restful PDP вместо AuthzForce Server. Работает с любым PolicyProvider. Проверьте раздел Extensions для получения дополнительной информации . По сравнению с решением 1 главное преимущество: дополнительный код не требуется. Но 2 недостатка: а) Нет PAP API. Тем не менее, код легко модифицируется, чтобы добавить собственный REST API для того, что вам нужно. б) PDP API не является мультитенантным. Если вам нужно несколько арендаторов / доменов с отдельным PDP, вам нужно несколько экземпляров сервера (по одному на домен).

...