我是XACML(可扩展访问控制标记语言)的新手,我正在研究TSPM(它是一种利用XACML的商业产品)可以满足某些业务需求。
所以我正在寻找这个问题的答案:
假设我有一个网站页面,其中包含由具有特定应用程序配置文件的用户访问的3个链接。 是否有可能创建一个限制和管理“链接”的策略(假设某个配置文件用户只能看到2个链接而不是3个,直到午夜?)
主要问题是我无法弄清楚XACML断言中的资源是什么,我在一些文档中找到了这个定义:
资源是可以控制访问的任何内容。示例包括XQuery模块和Java方法。
任何人都可以通过真实示例XACML帮助更好地理解?
谢谢大家!
答案 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将以许可,拒绝或不可申请的方式回复。