Ограничительные политики XACML - PullRequest
2 голосов
/ 05 октября 2011

Я очень новичок в XACML (расширяемый язык разметки контроля доступа), я изучаю, что может сделать TSPM (это коммерческий продукт, использующий XACML) для некоторых бизнес-потребностей.

Итак, яискал ответ на этот вопрос:

Предположим, у меня есть страница веб-сайта с 3 ссылками, доступными пользователю с определенным профилем приложения.Можно ли создать политику, которая ограничивает и управляет «ссылками» (скажем, до полуночи определенный пользователь профиля может видеть только 2 ссылки вместо трех) в соответствии с некоторыми правилами?

Основная проблема заключается в том, что я могуЧтобы выяснить, что такое ресурс в утверждении XACML, я только что нашел в какой-то документации это определение:

Ресурс - это все, к чему можно контролировать доступ.Примеры включают модули XQuery и методы Java.

Кто-нибудь может помочь в лучшем понимании с реальными примерами XACML?

Спасибо всем!

Ответы [ 2 ]

2 голосов
/ 06 октября 2011

(я технический руководитель TSPM или Tivoli Security Policy Manager для тех, кто не знаком с продуктом).

Вариант использования, который вы описываете, определенно возможен. Вам, вероятно, не нужно сосредотачиваться на сыром XACML - мы прилагаем много усилий для обеспечения пользовательского интерфейса более высокого уровня для разработки политик.

Один из способов смоделировать это состоит в том, чтобы каждая ссылка была представлена ​​другой структурной точкой в ​​пользовательском интерфейсе TSPM с соответствующей политикой, прикрепленной к каждой. Например, две ссылки могут иметь политику, которая представляет «разрешить всем пользователям в любое время», а одна ссылка может иметь «разрешение, когда текущее время до полуночи».

Затем вы вызываете нашу среду выполнения перед рендерингом каждой ссылки, чтобы узнать, сможет ли пользователь, прошедший проверку подлинности, просмотреть ее. Вы также можете сделать один звонок, чтобы получить список просматриваемых в данный момент ссылок, если хотите.

Вы можете использовать библиотеку тегов WebSphere Portal или наш API авторизации, если вы работаете в WebSphere. Если нет, то действительно легко создать клиент веб-службы для большинства платформ, которые могут вызывать службу авторизации с использованием XACML поверх SOAP. Для получения дополнительной информации о вызове службы авторизации см. Нашу общедоступную вики .

Edit:

Я понял, что на самом деле не отвечал на ваш вопрос о том, что такое ресурс с точки зрения XACML. Как вы, возможно, знаете, XACML разбивает контекст запроса на четыре раздела: Тема, Ресурс, Действие и Среда. Каждый из этих разделов содержит ноль или более атрибутов, каждый с идентификатором и типом. Ресурс в XACML - это просто атрибут или комбинация атрибутов из раздела Ресурс, которые вместе однозначно определяют то, что вы защищаете.

Спецификация определяет для этой цели идентификатор urn:oasis:names:tc:xacml:1.0:resource:resource-id, и он может быть любого типа, но обычно это строка или URI.

В вашем случае использования каждая ссылка может иметь строковый идентификатор, такой как "link-1", "link-2" и "link-3". Ваша политика будет использовать эти идентификаторы, а ваше приложение будет передавать их при запросе решения для каждой ссылки.

1 голос
/ 08 января 2013

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

В вашем примере вы упоминаете, что хотите контролировать доступ к веб-страницам и что вы хотите учитывать время суток. Для этого вы должны написать политику XACML, где вы будете проверять страницу URL страницы и время суток.

В псевдокоде это будет:

Permit if resource-id=='/pages/MyPage.jsp' AND current-time>09:00AM AND current-time<05:00PM

В ALFA, сокращенной записи для XACML, это будет:

namespace com.stackoverflow.xacml{
import Attributes.*
policy accessPages{
    apply firstApplicable
    rule accessPage1{
        target clause resourceId=="/pages/MyPage.jspx" 
               and currentTime>"09:00:00":time 
               and currentTime<"17:00:00":time
        permit
    }
}
}

Плагин ALFA для Eclipse - бесплатного инструмента - сгенерирует это в код XACML 3.0:

<?xml version="1.0" encoding="UTF-8"?>
 <!--This file was generated by the ALFA Plugin for Eclipse from Axiomatics AB (http://www.axiomatics.com). 
 Any modification to this file will be lost upon recompilation of the source ALFA file-->
<xacml3:Policy xmlns:xacml3="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17"
    PolicyId="http://axiomatics.com/alfa/identifier/com.stackoverflow.xacml.accessPages"
    RuleCombiningAlgId="urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:first-applicable"
    Version="1.0">
    <xacml3:Description />
    <xacml3:PolicyDefaults>
        <xacml3:XPathVersion>http://www.w3.org/TR/1999/REC-xpath-19991116</xacml3:XPathVersion>
    </xacml3:PolicyDefaults>
    <xacml3:Target />
    <xacml3:Rule 
            Effect="Permit"
            RuleId="http://axiomatics.com/alfa/identifier/com.stackoverflow.xacml.accessPages.accessPage1">
        <xacml3:Description />
        <xacml3:Target>
            <xacml3:AnyOf>
                <xacml3:AllOf>
                    <xacml3:Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
                        <xacml3:AttributeValue
                            DataType="http://www.w3.org/2001/XMLSchema#string">/pages/MyPage.jspx</xacml3:AttributeValue>
                        <xacml3:AttributeDesignator 
                            AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id"
                            DataType="http://www.w3.org/2001/XMLSchema#string"
                            Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource"
                            MustBePresent="false"
                        />
                    </xacml3:Match>
                    <xacml3:Match MatchId="urn:oasis:names:tc:xacml:1.0:function:time-less-than-or-equal">
                        <xacml3:AttributeValue
                            DataType="http://www.w3.org/2001/XMLSchema#time">09:00:00</xacml3:AttributeValue>
                        <xacml3:AttributeDesignator 
                            AttributeId="urn:oasis:names:tc:xacml:1.0:environment:current-time"
                            DataType="http://www.w3.org/2001/XMLSchema#time"
                            Category="urn:oasis:names:tc:xacml:3.0:attribute-category:environment"
                            MustBePresent="false"
                        />
                    </xacml3:Match>
                    <xacml3:Match MatchId="urn:oasis:names:tc:xacml:1.0:function:time-greater-than-or-equal">
                        <xacml3:AttributeValue
                            DataType="http://www.w3.org/2001/XMLSchema#time">17:00:00</xacml3:AttributeValue>
                        <xacml3:AttributeDesignator 
                            AttributeId="urn:oasis:names:tc:xacml:1.0:environment:current-time"
                            DataType="http://www.w3.org/2001/XMLSchema#time"
                            Category="urn:oasis:names:tc:xacml:3.0:attribute-category:environment"
                            MustBePresent="false"
                        />
                    </xacml3:Match>
                </xacml3:AllOf>
            </xacml3:AnyOf>
        </xacml3:Target>
    </xacml3:Rule>
</xacml3:Policy>

Тогда все, что вам нужно сделать, это отправить правильный вопрос / запрос на авторизацию из вашего приложения в PDP XACML. По сути, вы спросите:

Can user Alice access page /pages/MyPage.jsp?

После этого PDP ответит разрешением, отказом или неприменимостью.

...