Как XACML PEP взаимодействует с контекстом?

Мой вопрос связан с ролью и назначением обработчика контекста XACML. Если я правильно понимаю спецификацию OASIS XACML3.0, PEP перехватывает запрос на некоторый ресурс или доступ от клиентского приложения, которое затем использует обработчик контекста для создания собственного объекта контекста XACML, подходящего для обработки PDP. В моем дизайне у меня есть обработчик контекста как глобальный класс с методами для создания объектов запроса и анализа результатов xml. Я представляю, как класс выглядит примерно так:

public static class ContextHandler
{
    public static bool CreatePolicy(PolicyType policyName)
    {
        // Serialize PolicyType to xml document

    }

    public static PolicyType LoadPolicy(string policyName)
    {
        // 1. Load policy from db, filesystem...
        // 2. Hydrate/deserialize into XACML policy object
        // 3. Return PolicyType object
    }

    public static RequestType BuildRequest(
        Dictionary<string, string> subjects,
        Dictionary<string, string> resources,
        Dictionary<string, string> actions,
        Dictionary<string, string> environment)
    {            
        // 1. Create AttributesType collection, populate with subjects, resource...
        // 2. Populate RequestType object
        // 3. Return Request

    }
}

Объекты RequestType, AttributesType и другие являются частью контекста XACML.

Это правильный подход для класса обработчика контекста, или я полностью упустил смысл обработчика контекста?

Большое спасибо!


person Rockdocta    schedule 04.06.2012    source источник
comment
Рассмотрите возможность удаления тега C#, так как это общий вопрос спецификации XACML.   -  person martijno    schedule 02.07.2012


Ответы (3)


В полной реализации XACML 2.0/3.0 реальным центральным узлом или узким местом всего процесса авторизации является компонент обработчика контекста, а не PEP или PDP. Предлагаемый поток данных в официальная документация ясно показывает это.

Итак, я думаю, что первый вопрос: "Для простоты, является ли хорошим подходом вставить компонент обработчика контекста в другой компонент?" Да. А затем «Если да, то лучше всего использовать PEP или PDP?». Ну, думаю, это зависит от вашего собственного реального сценария.

В общем простом сценарии, например, когда вам не нужен PIP, я предлагаю вставить обработчик контекста в домен PEP, как вы это сделали. И это по многим причинам:

  • у вас может быть много PEP, а не только один, поэтому вы должны добиться разделения между PEP и PDP.
  • каждый PEP знает свои собственные спецификации запроса авторизации, поэтому он может преобразовывать собственные запросы в стандартные запросы XACML и наоборот.
  • вы получаете центральный и стандартный PDP, на который не влияет конкретная логика PEP, ни зависимости PEP (т. е. сторонние библиотеки), ни управление кодом PEP (т. е. изменения спецификаций запросов авторизации, исправления ошибок, новые развертывания и т. д.)

В более сложном сценарии ваши запросы на авторизацию могут не содержать всей информации, необходимой PDP для принятия решения. В этом случае PDP должен будет запросить эту информацию у обработчика контекста, а обработчик контекста должен иметь доступ к компоненту PIP для извлечения этих значений пользовательских ресурсов-среды. Поскольку PIP обычно обращается к централизованным ресурсам, он обычно является централизованной службой. PDP также обычно является централизованной службой, поэтому обычно PDP и PIP находятся в одном домене.

В этом случае у вас может возникнуть соблазн внедрить обработчик контекста в компонент PDP. Но если вы это сделаете, вам придется иметь дело с другими проблемами, потому что вы теряете развязку и все функции, перечисленные выше, в простом сценарии. Более того, следуя спецификациям XACML, я ожидаю, что стандартный PDP сможет общаться через сообщения XACML, но, если вы поместите обработчик контекста прямо туда, PDP действительно начнет говорить на родном языке PEP.

person Giuseppe Bertone    schedule 13.01.2014

Я считаю обработчик контекста частью PDP. PEP перехватывает вызов SOAP, извлекает значения параметров, составляет стандартизированный запрос с использованием этих значений и отправляет запрос на PDP. PDP извлекает значения параметров из этого запроса, ищет дополнительные значения, запрашивая некоторые PIP, сопоставляет запрос со своими политиками для принятия решения и составляет стандартизированный ответ, который отправляется обратно в PEP.

person martijno    schedule 02.07.2012
comment
Спасибо @martijno. Простите мое невежество в этом вопросе, очень трудно найти ресурсы по XACML (особенно 3.0, который вносит значительные изменения по сравнению с 2.0). Я понимаю идею о том, что PEP перехватывает вызов SOAP в приложении ASP.Net... но как это будет работать в среде, которая не обязательно основана на веб-форме, такой как Win32 или WPF/Silverlight? Не нужно ли вам вместо этого вручную вызывать метод или службу, проверяющую авторизацию? - person Rockdocta; 16.07.2012
comment
Да, вы можете сделать PEP частью приложения, защищая каждый вызов конфиденциального ресурса, сначала проверяя его с помощью PDP. Или вы можете расположить PEP рядом с защищенной службой, сверяясь с PDP для каждого входящего вызова. - person martijno; 17.07.2012

Да. Я также надеюсь, что обработчик контекста станет частью PDP. PEP может быть с вашим приложением, где оно перехватывает ваши запросы и запрашивает решение об авторизации от PDP. Вы можете найти XACML 3.0 с открытым исходным кодом. реализация под названием «Balana» (улучшение sun-xacml) из здесь, которая используется WSO2 Identity Server в качестве механизма XACML. В его источнике вы можете найти классы ctx, которые разрабатывают реализацию обработчика контекста. Также этот блог поможет вам чтобы понять новые вещи с XACML 3.0.

person Asela    schedule 23.07.2012
comment
Привет Asela Balana на 100% с открытым исходным кодом или вы взимаете плату за производство. Я не понимаю этого. Скажите, пожалуйста, под какой лицензией он выпущен? - person Utsav; 07.01.2014
comment
Balana - это библиотека с открытым исходным кодом на 100%. Любой может использовать ее бесплатно... Даже вы можете изменить исходный код по своему усмотрению. Она основана на лицензии Apache 2.0. Пожалуйста, проверьте здесь. svn.wso2.org/repos/wso2/trunk/commons/ балана/README.txt - person Asela; 07.01.2014
comment
Я прошел по указанной ссылке insightforfuture.blogspot. in/2012/09/ здесь, на блок-схеме, я просто хочу знать, какой канал вы используете для защиты JSON от прокси-сервера PEP до сервера идентификации wso2? - person Utsav; 07.01.2014
comment
Профиль JSON не поддерживается WSO2IS. WSO2IS предоставляет API прав как веб-сервисы на основе SOAP и сервисы экономии. xacmlinfo.org/2012/06/13/pdp-pep-коммуникация -wso2is - person Asela; 07.01.2014
comment
поэтому предположим, что если я верну JSON, как я могу защитить это - person Utsav; 07.01.2014
comment
Извини. Я имею в виду, что связь PEP и PDP. Существует новая спецификация, которая позволяет использовать PEP-PDP с использованием JSON. Хотя в блоге говорится, что он поддерживается, он еще не поддерживается. Однако JSON можно защитить с помощью шифрования (JWE)/подписи (JWS) или с помощью SSL. - person Asela; 07.01.2014
comment
так что, если я прав, вы обсуждаете новую спецификацию JSON XACML 3.0. Как и в balana, запрос/ответ обрабатывается с использованием формата XML с использованием PDP. Итак, если я прав в спецификации JSON XACML 3.0, запрос/ответ, обрабатываемый PDP, означает, что внутренняя обработка также осуществляется в форме JSON. - person Utsav; 07.01.2014
comment
Да.. Но я не думаю, что это так.. профиль говорит о запросе/ответе. Не о политиках.. Политики все еще в XML. Поэтому, как только запрос JSON получен PDP, PDP может преобразовать его в XML и использовать обычную оценку (может использовать Balana). Затем PDP может покрыть ответ на JSON и вернуть его PEP. - person Asela; 07.01.2014
comment
спасибо Asela. Я буду следовать тому же принципу с Balana для обработки запроса и ответа, но я хочу знать, как защитить ответ PDP в формате JSON от Balana, поскольку это данные JSON. Это их каким-либо образом, пожалуйста, скажите мне. - person Utsav; 07.01.2014
comment
То есть вы имеете в виду, что хотите управлять доступом к данным JSON? Существует конечная точка отдыха, и клиент отправляет ей запрос/ответ JSON. Вы хотите перехватить сообщение и авторизовать его с помощью XACML PDP? Или меньше, не могли бы вы объяснить немного больше? - person Asela; 08.01.2014