мои вопросы применимы как к серверу идентификации wso2 4.5 (IS), так и к балане «автономно».Wso2 Identity server: улучшает производительность AttributeFinderModule для атрибутов по ресурсам
Я успешно обрабатываю многократные запросы XACML, отправленные в службу разрешения в IS (интерфейс веб-службы PDP), как указано в «XACML v3.0 Multiple Solution Profile Version 1.0».
Я нашел в Интернете несколько примеров пользовательского «искателя атрибутов», но во всех этих примерах реализация извлекает атрибуты объекта (например, роль субъекта), а не ресурсов. В моем случае использования я отправил PDP запрос xacml со всеми атрибутами объекта и списком идентификаторов ресурсов. Я реализовал атрибут finder для извлечения атрибутов ресурсов из внешней системы (например, базы данных или веб-службы). Первый вопрос: этот подход не рекомендуется по той же причине?
Второй вопрос касается выполнения этой реализации AttributeFinder, если количество ресурсов увеличивается.
Предположим, что мы ограничили список атрибутов ресурсов, которые могут использоваться в определениях политик. Например, небольшое количество атрибутов.
Метод от org.wso2.balana.finder.AttributeFinderModule:
public EvaluationResult findAttribute(URI attributeType, URI attributeId,
String issuer, URI category, EvaluationCtx context)
должны возвращать значение/значения одного атрибута. Итак, если политика оценивает больше атрибутов для ресурса, этот метод называется более раз для одного и того же ресурса. Я мог бы избежать многократного вызова внешней системы для разных атрибутов одного и того же ресурса, если я прочитал все атрибуты ресурса при первом вызове этого метода и сохранил эти данные (например, по локальной переменной потока), которые могут быть используется для последующих вызовов.
Итак, если у меня есть несколько запросов, и политика в отношении атрибутов ресурсов применяется к этому запросу, метод вызывается больше раз не только для каждого атрибута того же ресурса, но и для каждого ресурса. Чтобы улучшить производительность, я хотел бы уменьшить количество вызовов во внешнюю систему , поэтому я хотел бы прочитать при первом вызове метода «findAttribute» атрибуты для всех ресурсов (или подмножества, если у меня есть очень большой задавать). Для этого мне нужен доступ в методе «findAttribute» к списку всех идентификаторов ресурса в запросе. EvaluationCtx, который я получаю в атрибуте атрибута , является только одним из тех, которые находятся в наборе, который построен из нескольких запросов. Полный набор обрабатывается циклически в методе org.wso2.balana.PDP.evaluate (EvaluationCtx) и недоступен в методе «findAttribute».
Я мог бы, например, расширить класс PDP, чтобы опубликовать в локальной потоковой переменной полный набор EvaluationCtx (или список идентификаторов ресурсов), но это может работать в автономном режиме «balana», а не на сервере wso2 Identity. Любые идеи?
спасибо. Stefano
так вы хотите сказать, если мы сформируем запрос для субъекта, ресурса и действия, например <Атрибуты Категория = "действие> somedata это будет более эффективная производительность мудрым? – Utsav
Нет ... Не было бы никакого эффекта добавления но в WSO2 Identity Server существует простой абстрактный интерфейс, который позволяет думать, что только четыре типа категорий ... На самом деле это имеет некоторое улучшение. Но если у вас есть новая категория, вы можете написать расширение этого атрибута и напишите http://svn.wso2.org/repos/wso2/carbon/platform/trunk/components/identity/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement /pip/AbstractPIPAttributeFinder.java – Asela
Привет, Асела спасибо за ваш ответ, я опубликовал некоторые вопросы, касающиеся этого вопроса. Вы можете взглянуть на эту проблему https://wso2.org/jira/browse/COMMONS-107 – Utsav