我对XACML (eXtensible访问控制标记语言)非常陌生,我正在研究TSPM (它是一种使用XACML的商业产品)能做些什么来满足一些业务需求。
所以我在寻找这个问题的答案:
让我们假设我有一个网站页面,其中有3个链接,用户使用某个应用程序配置文件访问。有没有可能根据某些规则创建一个策略来限制和管理“链接”(假设某个配置文件用户在午夜之前只能看到2个链接,而不是3个)?
主要的问题是我不能弄清楚XACML断言中的资源是什么,我只是在一些文档中找到了这个定义:
资源是可以控制访问的任何东西。示例包括XQuery模块和Java方法。
有没有人可以帮助我们更好地理解XACML的真实例子?
谢谢大家!
发布于 2011-10-06 05:15:44
(我是TSPM的技术负责人,对于其他不熟悉该产品的人来说,我是Tivoli Security Policy Manager )。
您所描述的用例绝对是可能的。不过,您可能不需要关注原始的XACML -我们做了很多工作来为创作策略提供更高级别的用户界面。
对此建模的一种方法是让每个链接在TSPM的UI中由不同的结构点表示,并为每个链接附加适当的策略。例如,两个链接可能具有表示“允许所有用户在任何时间使用”的策略,而一个链接可能具有“当当前时间在午夜之前时允许”。
然后,您可以在呈现每个链接之前调用我们的运行时,以查看当前通过身份验证的用户是否能够查看它。如果您愿意,您还可以调用一次来获取当前可见链接的列表。
如果您在WebSphere上运行,您可以使用WebSphere门户标记库或我们的Authorization API。如果不是这样,那么为大多数平台构建一个web服务客户端非常容易,这些平台可以使用SOAP上的XACML调用授权服务。有关调用授权服务的更多信息,请参阅我们的public wiki。
编辑:
我意识到我并没有真正回答您的问题,即从XACML的角度来看,什么是资源。您可能知道,XACML将请求上下文分为四个部分:主题、资源、操作和环境。这些部分中的每个部分都包含零个或多个属性,每个属性都有一个标识符和一个类型。XACML中的资源只是resource部分中的一个属性或属性的组合,它们共同唯一地标识您正在保护的任何内容。
规范为此定义了标识符urn:oasis:names:tc:xacml:1.0:resource:resource-id,它可以是任何类型,但通常是字符串或URI。
在您的用例中,每个链接可能有一个字符串标识符,如" link -1“、"link-2”和"link-3“。您的策略将使用这些标识符,并且您的应用程序将在请求每个链接的决策时传入这些标识符。
发布于 2013-01-08 17:03:01
在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将使用Permit、Deny或NotApplicable中的任何一个进行应答。
https://stackoverflow.com/questions/7663255
复制相似问题