XACML限制策略

时间:2011-10-05 14:50:56

标签: xacml

我是XACML(可扩展访问控制标记语言)的新手,我正在研究TSPM(它是一种利用XACML的商业产品)可以满足某些业务需求。

所以我正在寻找这个问题的答案:

假设我有一个网站页面,其中包含由具有特定应用程序配置文件的用户访问的3个链接。  是否有可能创建一个限制和管理“链接”的策略(假设某个配置文件用户只能看到2个链接而不是3个,直到午夜?)

主要问题是我无法弄清楚XACML断言中的资源是什么,我在一些文档中找到了这个定义:

资源是可以控制访问的任何内容。示例包括XQuery模块和Java方法。

任何人都可以通过真实示例XACML帮助更好地理解?

谢谢大家!

2 个答案:

答案 0 :(得分:2)

(我是TSPM的技术主管,或者是不熟悉该产品的其他人的Tivoli安全策略管理器。)

您所描述的用例绝对是可能的。您可能不需要专注于原始XACML - 我们需要付出很多努力来为创作策略提供更高级别的用户界面。

对此进行建模的一种方法是让每个链接由TSPM UI中的不同结构点表示,并为每个链接附加适当的策略。例如,两个链接可以具有表示“允许所有用户随时”的策略,并且一个链接可以具有“当前时间在午夜之前允许”。

然后,您将在呈现每个链接之前调用我们的运行时,以查看当前经过身份验证的用户是否应该能够查看它。如果您愿意,也可以拨打一个电话获取当前可查看链接的列表。

如果您在WebSphere上运行,则可以使用WebSphere Portal标记库或我们的Authorization API。如果不是,那么为大多数平台构建Web服务客户端非常容易,这些平台可以通过SOAP使用XACML调用授权服务。有关调用授权服务的更多信息,请参阅我们的public wiki

编辑:

我意识到我并没有真正解决你的问题,这是关于资源在XACML方面是什么。您可能知道,XACML将请求上下文分为四个部分:主题,资源,操作和环境。这些部分中的每一部分都包含零个或多个属性,每个属性都带有标识符和类型。 XACML中的资源只是资源部分中的属性或属性组合,它们共同唯一地标识您正在保护的内容。

规范为此目的定义了标识符urn:oasis:names:tc:xacml:1.0:resource:resource-id,它可以是任何类型,但通常是字符串或URI。

在您的使用案例中,每个链接可能都有一个字符串标识符,如“link-1”,“link-2”和“link-3”。您的策略将使用这些标识符,并且您的应用程序会在为每个链接请求决策时将其传递给您。

答案 1 :(得分:1)

在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
    }
}
}

Eclipse的ALFA插件 - 一个免费工具 - 将生成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>

然后,您需要做的就是将您的应用程序的正确授权问题/请求发送到XACML PDP。基本上你要问的是:

Can user Alice access page /pages/MyPage.jsp?
然后,PDP将以许可,拒绝或不可申请的方式回复。

相关问题