??xml version="1.0" encoding="utf-8" standalone="yes"?>
<>http://www2.ccw.com.cn/05/0505/e/0505e04_1.asp</P>
SAMLQ集中n份管理的U诀
<>
<B>?晓晨 ~译</B>
</P>
<>
<P>w䆾理是个复杂问题。它包括口ol护、用户配|和讉K控制理。本文着重介l了w䆾理中被SAML大大化了的一部分Q即Z角色的访问控ӞRBACQ。越来越多的厂商在支持RBACQ因为它可以让管理员化访问控制列表?
<P>曄调查q一个数据:内部用户和外部伙伴同时在使用的口令有多少Q回{居然超q?5个。当Ӟ他们可以把这15个口令全记在脑子里,每次需要访问新的资源、新的应用或者新的数据库Ӟ扑ֈ相应的管理员。管理员会随叫随刎ͼ怸休假Q而且始终会有后备理员。当用户d公司、被解雇或伙伴{眼间变成Ҏ后,理员L会被告知要迅速取消他们的讉K权限。在q种理想情况下,我们知道QCIO们L会因为得C用户反映的能非常Ҏ地访问数据的夸奖而开心不巌Ӏ?
<P>解决q些问题的一个方法是w䆾理。n份管理是指对用户配置、口令和讉K控制的管理。访问权限通常存放在不同的位置Q不同的应用和资源有着不同的访问控制列表。n份管理必L制分布在不同位置上的数据、h员和资源的用情c过去,w䆾理功能p多不同的pȝ完成Q比如,某一个程序处理用L配置Q另一个程序管理口令,d目录讉K协议QLDAPQ可保存验证信息Q而每个应用程序(或管理员Q则l持不同的用戯问控制列表。那Ӟl护、同步及更新q些不同功能是一件费力又贚w的事?
<P>为此Q有人开发了l合w䆾理{多功能的验证/授权QAAQWeb服务Q向整个企业推行联合的单ơ登录方案,向加n份管理这一目标q出了第一步。这UAA Web服务是一U系列的多服务Q可以让用户d一ơ,然后可以调用Web服务、访问很多应用系l和数据资源。这U方法有两大好处Q首先,它有助于化n份管理,因ؓ它把对访问控制的理从本地的多个应用pȝ转移C理中心Q如LDAP。其ơ,它提供了让Web服务可以讉K数据的一般的Ҏ?
<P><B>集中是关?lt;/B>
<P>使用LDAP作ؓ理中心的办法可采用Jericho Systems公司提供的规则集。这家Y件公司开发的EnterSpace产品SAML服务和规则引擎作为安全包的一个部分。之所以选择Jericho SystemsQ是因ؓq家公司提供的品物h廉,而且愿意q就各种限制。利用EnterSpaceQ你可以l合使用SAML、规则集以及定制的规则,把n份管理的所有部分与作ؓ理中心的LDAP联系h?
<P>集中及联p配|、口令管理和讉K控制让生zL单。把w䆾理程与作为参考点和管理中心的LDAP联系h是很自然的事。不q,LDAP通常用于验证Q而不是用于授权。SAML便于把LDAP验证和访问授权联pv来。?
<P><B>SAML的作?lt;/B>
<P>2002q?1月,l构化信息标准促q组l(OASISQ批准了SAML作ؓ商业合作伙伴之间交换验证和授权信息的可扩展标记语aQXMLQ框Ӟ其是借助Web服务交换的信息。有了SAMLQ多家公司管理的站点之间可以实现基于Web的安全兼容,如单ơ登录?
<P>SAML利用基本的Web服务标准Q如XML、简单对象访问协议(SOAPQ和传输层安全(TLSQ,支持安全交换验证和授权信息。RSA、Netegrity、IBM、Oracle、BEA、Oblix和Jericho{厂商已承诺支持SAMLQƈ正在把这规范实施到各自的品中厅R?
<P>“SAML断言”(SAML AssertionQ用SOAP消息里面的标题通过HTTPq行传输Q在断言理方和转发方之间传输安全信息。比如,用户在某一站点d后,SAML断言会传输用户验证o牌,其中提供了通过验证dq程站点验证的手DcSAML包包括验证令牌和用户属性,可以对照用于验证和访问控制的规则引擎q行验?
<P>值得一提的是,SAML不负责验证,它只负责传输被验证的信息。另外,SAML可用不同的验证理机构Q比如LDAP、活动目录和RADIUSQ允怋用不同的识别ҎQ如口o、生物检术、公钥基设施QPKIQ、安全套接层QSSLQ和Kerberos{等。随后,作ؓ传输机制QSAML传输用户已通过验证的断a信息。相比之下,SAML既不q行授权Q也不传输访问控制信息?
<P>不妨把SAML惛_成电影里由彪形大汉看守的一道门。如果某个可疑的来说Q“是Joe让我来的”,q意味着Joe验证了该n份,门卫会把他引到玩扑克牌的地方。如果一位光彩照人的x员过来说Q“是Rudolph让我来的”,门卫会先查Rudolph的贵宾访问列表,扑ֈ她的名字后,一路护送她观看赌场。最后,如果詹姆斯·邦德亮一下卡Q看一眼扫描装|,可能通过了n份卡和虹膜扫描的验证。然后,验证pȝ会与识别哪些特工有权q入的授权列表作一个对照?
<P><B>SAML的安全风?lt;/B>
<P>SAML可能会受CU广Zh知的安全dQ?
<P>重放dQreplay attackQ?如果恶意黑客劫持SAML令牌后进行重放,获得非法讉K权,׃发生q种dQ?
<P>DNSƺ骗Q如果黑客截获SAML令牌后,发送虚假的DNS地址Q就会发生这U攻?
<P>HTTP链接dQHTTP Referrer AttackQ:如果黑客重新使用HTTP链接标记Q就会发生这U攻凅R?
<P>利用定时会话可以减小或者消除这三种d的威胁。可以采用以下办法来消除dQo牌只用一ơ,q且把o牌用情况记入日志,q样重新使用׃被标出来Q用IP地址避免DNSƺ骗Q用安全超文本传输协议QHTTPSQ和SSL/TLSQ消除HTTPd。专家和分析师一致认为,q些风险是可以缓解的QSAML为断a提供了一U安全标准?
<P><B>q程?lt;/B>
<P>AA Web服务按顺序执行安全操作。用用户名和口令对与LDAP服务器上的信息进行对照,可以识别及验证用户的独特n份。每ơ登录会话都会创建携有验证信息和用户信息的SAML令牌。用户通过使用定义讉K控制的规则,获得讉K数据资源的授权,而Jericho Systems的EnterSpace规则引擎负责评估?
<P>q个大体上的程如图1所C。评估工作包括解析来自SAML令牌的信息,规则Z{略创徏而成。因则控制访问,q体现策略,所以引擎通过实施规则来执行策略管理。非常笼l地_用户ZLDAP信息、用户信息和讉K规则获得讉K权限。此外,用户d公司后,他们的由LDAP理的所有̎户会被注销Q所有访问权同时被取消。这P你就可以Z作ؓ理中心的LDAP来集中管理n份?
? 安全作业序
<P>Z加以说明Q不妨看看图2所C的几个步骤。用L录到桌面Z的客L后,客户端通过本地LDAPQ图中没有显C)对其q行验证。然后,客户端向SAML服务方发送包括返回验证信息的hQSAML服务方对信息打包处理后供Web服务使用。Web服务׃通过发送查询给LDAP服务器(图中没有昄Q核实SAML令牌里的验证信息。一旦通过了核实,Web服务根据规则引擎中的规则,允许讉K数据资源。然后,Web服务q回响应l客LQ从而完成用Lhq程?
? 验证/授权Web服务q程的重要参与?br /><P><B>工作原理</B>
<P>AA服务是一U复杂的Web服务Q遵守面向服务架构(SOAQ的原则。它ZHTTPS上的SOAPQ两者都是非专利性的开放标准,独立于Y件语a或者厂商系l。它们不需要用、许可或l护的费用。利用SOA原则q行设计意味着Q你可用模块化方式构Web服务Qؓ了用和l护的方便性,必要时可以删除或者更换它。因此,你不必改动其他部分,可以改动架构的M部分?
<P>AA服务使用本地域LDAPq行验证及随后基于SAML的安全断a。SAML令牌用来把断a传输到可信资源,再由可信资源允许或拒l对数据资源的访问?
<P>q种功能cMN执照Q机动R辆管理局QDMVQ就是管理方Q好比LDAPQ,负责核实你的w䆾及驾驶资根{交警充当可信资源,负责向DMV复核w䆾Q然后根据目前的N资格或者道路规则,批准或者禁止某N员是否有权驾驶?
<P>AA服务在用规则引擎评估授权规则时Q以允许或拒l访问数据资源限定条件的安全{略为基。引擎规则对加强{略理来说是核心所在?
<P>使用LDAP作ؓ理方还有助于实现n份集中管理。不是在单个资源处管理资源访问,而是使用LDAP和定义用戯色及相应数据参数Q如部门和管理别)的相应策略,来管理用戯问列表?
<P>以下是这个过E的几个重要步骤Q?
<P>W?步:用户d。用户需要访问数据资源,于是使用SOAP客户端利用用户名和口令对q行d。客L把用户名和口令对Q还有可能是其他安全因素Q传送给LDAPq行验证。LDAP核实用户后,把信息返回给客户端?
<P>W?步:SAML令牌。SOAP客户端把q回的LDAP信息及其他用户信息传送给SAML客户端。该服务方会按正格式把信息打包成SAML令牌QSAML客户端把令牌q回lSOAP客户端,然后SOAP客户端把SAML令牌和用戯求打包成SOAPh?
<P>W?步:SAML会话开始。SOAP客户端开启定时的SAML会话Qƈ发送SOAPhl相应的Web服务Q以满用户需求。Web服务解析SAML令牌后,通过LDAP核实验证信息。这P用户只要d一ơ:每个Web服务都可以充当用户代理,q获得数据资源的信QQ因为Web服务核实了请求信息?
<P>W?? 授权。经验证后,Web服务发送请求给q行规则引擎的SAML服务器。SAML在这一步ƈ不是l对必要的,但对我们来说很方ѝ规则引擎评估用户参数后Q确定授权用L讉KU别。评估工作基于体Cl预定访问策略的规则q行。访问别核实信息返回给Web服务?
<P>W?? h完成。Web服务h数据源提供数据,把请求结果打包成SOAP响应Q然后发回给SOAP客户端。SOAP客户端再把数据提供给用户Q同时终止SAML会话。SAML令牌期满Q不能重复用?
<P><B>集中是l一</B>
<P>ȝ说来Q我们徏立的ZSAML的AA Web服务依靠LDAP作ؓ理中心。用LDAP和执行安全策略的授权规则引擎可以实现集中w䆾理。集中n份管理的一个好处是Q可以获得简化和l一的访问控制管理?
<P>集中w䆾理意味着Q你可以在某一个点理讉K控制列表。比如,l止某个员工的̎户就可以l止与中央̎Pq里是LDAPQ相关的所有访问。这UWeb服务为断a、认证和服务提供了通用服务。开发h员可以调用这UWeb服务Q允许Web服务讉K所需的应用和数据资源?
<P><B>所汲取l验</B>
<P>SAML传输的是令牌Q它不是验证或者授权机制。ؓ了缓解风险,SAMLpȝ使用定时会话、IP地址、HTTPS和SSL/TLS。安全Web服务非常复杂Q涉及法律、安全和政治{方面?
<P>使用LDAP作ؓ理中心可以实现集中w䆾理。规则引擎ؓ讉K控制和策略管理提供了有效而灵zȝҎQ它同时支持Z角色和基于属性的讉K控制Q?
<P>可以化n份管理,首先是因为可以在LDAP处激zL者禁用̎戗其ơ,可以避免费用Q因为可以集中及减少验证应用Q减审查风险。最后,可以化n份管理,是因̎L理用现有的LDAP服务Q从而减了开销、加Z同步?
Q计机世界?W?5?B25、B26Q?</P></P>
WSS、SAML和XACML之间有许多共性。或许最明显的就是它们都使用XML表示信息。其ơ是Q因三种可用的安全服务都已经在计机pȝ中应用多q了Qؓ了更加适用于大型分布式环境Q如互联|,它们都具有一些特定的功能。此外,三者都参考ƈl合了现有的安全性标准,q尽量减对已有功能的重复?/p>
两个主要原因促三者都采用了XML技术。第一QXML使它们便于扩展,以便可以以一U原有格式无法实现的方式来满xU特D需求。第二,XML支持采用大量可用的Y件工兯行处理的实现。对于WSS来说Q还有一个原因,卻IWSS被设计ؓ支持与SOAP的语法和处理模型q行紧密集成Q而SOAP是用XML定义的?br />SAML
授权和审计跟t是常见的安全服务。以前,大多数系l设计时都假讑ց问控制决定所必需的所有信息都由单个系l来处理Qƈ且所有要记录的数据都攑֜审计跟踪中。但是,大规模分布式pȝ通常是由多个l织使用各种产品建立的。这意味着用户可能要由不同的验证方使用不同的方法进行验证。此外,不同的验证方q要保存有关用户Ҏ和属性的不同信息。集中管理所有这些能力和信息是不现实的。SAML提供了标准格式来表示w䆾验证、用户属性以及请求和接受该标准的协议。这被称n份联盟(Identity FederationQ?/p>
在OASIS的最初开发阶D,SAML只指定了该n份信息的生者与消费者之间的通信。SAML定义了如何创建有关用户属性和w䆾验证事g的断aQ以及如何以一U灵z而可扩展Q以便满_它需求)的方式获得这些信息。SAMLq详l定义了一些常见场景(如:Web单点dQ来保互操作性?/p>
Liberty Alliance Project和Internet2 Shiboleth groupq一步地增强和扩展了SAML。增加了许多新功能,以便支持SAML验证方之间的通信Q更加详l地描述w䆾验证ҎQ注销用户q保护隐U。这些工作又提交lOASISQƈ合ƈ到SAML2.0中,SAML2.0?005q?月成Z个OASIS标准。SAML被设计ؓ用于多种不同的环境,支持使用不同的n份验证和加密Ҏ。它支持各种不同的消息流Q甚臛_以用于不使用XML的遗留环境中?/p>
XACML
XACMLQ也是由OASIS开发的Q是一U表C问控制策略的语言。大多数计算Z业h士都熟悉Z权限或访问控制列表(ACLQ的讉K控制。但是,q些机制~少表示复杂{略Q在现实pȝ中经帔R要用刎ͼ的能力。因此,讉K控制{略通常会嵌入应用程序代码中。这使得更改{略Q或者只是找出哪些策略正在实施)变得很困难?/p>
XACML能够实际C用Q何可用的信息来决定是否该许可对一个资源的讉K。也可以兌附加的动作、被调用的契U和军_Q例如,要求h的数据在90天后删除?/p>
XACML可以Ҏ资源的属性做出决定,包括资源的内Ҏ环境因素Q如日期、时间或位置。它也会考虑Ch兌的各方的Ҏ,比如角色或组成员关系。这可能不只包括h方,q包括其他方Q比如接受数据方或请求中转方?/p>
XACML 2.0?005q?月成Z个OASIS标准。它在具有多个创建策略的理员的大规模环境中q行良好。因为SAML可用于Q何访问控制系l,XACML可以与SAML一起用,或者单独用。有专门的支持它们一起工作的Ҏ?br />WSS
WSS指定了如何保护通过|络传递的SOAP消息。它包括w䆾验证、完整性保护和保密性。它没有指定如何实现讉K控制Q但提供了可以用于访问控制的信息。在WSS出现之前Q最常见的保护消息的Ҏ是用SSL或TLS协议。这些协议仍焉用于许多应用程序,但WSS提供了更多的功能和灵zL?/p>
SSL和TLS是对整个消息q行加密Q而WSS允许有选择性地实现加密。例如,它允许应用程序防火墙查没有加密的部分。此外,WSSq支持复杂的多方交互Q这是处理复杂的电子商务事务所需要的?/p>
此外QWSS在基架构选择斚w提供了更大的灉|性。同SSL和TLS一P它也支持X.509技术,q可以用Kerberos、SAML或以前的普通用户名和密码。因为WSS作用于SOAP层,在信息在|络上传输甚臛_Ҏ息进行排队或存储Ӟ它都能发挥作用?/p>
WSS采用W3C所开发的XML数字{QXML Digital SignatureQ和XML加密QXML EncryptionQ标准。WSS通过称为Security的XML元素插入SOAP标题中而发挥作用。其中包含所有有兛_用于消息的n份验证、数字签名和加密的信息。它向接受方提供解密和验证消息所需的信息。密钥和w䆾验证信息可以使用X.509证书、Kerberos ticket、SAML断言或其他方法进行定义?/p>
2004q_WSS 1.0成ؓ一个OASIS标准。现在,WSS 1.1p完成了。由于WSS所提供的灵zL,不同产品间的互操作可能会比较困难。ؓ了解册个问题,Web Services Interoperability Organizationl织(WS-I)正在开发一个配|文Ӟ以便减少可变性,q给Z用WSSQ以及SSL和TLSQ的最佛_c这个Basic Security Profile (BSP)的草案已l公布,q计于2006q初完成。WS-I成员q构Z一个示例应用程序来说明WSS和测试工P可以查消息是否服从BSPQ的正确使用?br />l束?
上面介绍的三个安全性标准在设计时就被赋予了极大的灵zL,q是通过使用XML而实现的。SAML和XACML在几乎所有的环境中都支持w䆾验证服务Q但更适用于大规模分布式系l。在SOAP环境中,WSS提供了明的消息保护Q但是在软g基础架构斚wQ它提供了很多选择。有XML作ؓ其共同的基础Q这三个标准可以有效地共同用,或者也可以单独使用?br />参考资?
OASIS主页
WSS主页
SAML主页
XACML主页
dev2dev Web ServicesTechnologyCenter
Quick WLS 9.0 SAML Overview——Neil Smithline的blogQdev2devQ?005q?月)
原文出处
Demystifying Security Standards
http://dev2dev.bea.com/pub/a/2005/10/security_standards.html
作者简介?br />Harold Lockhart是BEA的Standards and Architecture Group中的主要工程技术专家。他是在国际上很有知名度的作家和演讲Ӟ他一直以来都是OASIS的Web Services Security和SAML技术委员会的积极捐献者?/p>
如上图所C,微Y早期对客LP3P的支持需要用h对cookie行ؓ的控制权?
如果用户览的网站与用户记录的参C同,或没有发现隐U政{,IE׃通过其状态栏中的一个图标警告用P参见下图Q,q用户如何处理q一情况?
XACML━━XML讉K控制标记语言
XACML是一U获取资源授权策略的提议Q它解x权活动的控制问题。它之所以与隐私有关是因为,讉K控制是企业保证用户隐U的一U安全机ӞXACML可能被用来获取用户ؓ资料源定义的隐私{略。?br /> 下面是一个XACML{略的例子,病h能够讉K他自q病历。这一{略说明了XACML和SAMLQ安全主张标记语aQ之间的联系。SAML定义了一U语法,认证、授权主张和查询能够用它来表达,q在|络上传输。在下面的例子中Q我们假讑ַl收CSAML AuthorizationDecisionQueryQ它询问应当授予要求查询自己病历的病Z么样的权限?
<?xml version="1.0"/>
<rule>
<target>
<subject>
samlp:AuthorizationDecisionQuery/Subject/NameIdentifier/Name
</subject>
<resource>
<patternMatch>
<attributeRef>
samlp:AuthorizationDecisionQuery/Resource
</attributeRef>
<attibutevalue>medico.com/record.*</attibutevalue>
</patternMatch>
</resource>
<actions>
<saml:Actions>
<saml:Action>read<saml:Action>
</saml:Actions>
</actions>
</target>
<condition>
<equal>
<attributeRef>
samlp:AuthorizationDecisionQuery/Subject/NameIdentifier/Name
</attributeRef>
<attributeRef>
file://medico.com/records/patient/patientName
</attributeRef>
</equal>
</condition>
<effect>Permit</effect>
</rule>
XML Encryption
XML Encryption是一个获取在L数据上完成加密操作结果的XMLW号的提案。XML Encryption提案的一个重要功能就是它支持只对部分XML文加密Q这不但能够减少加密的工作量Q更重要的是Q它能够非机密数据仍然用纯文本形式表达Q一般的XML工具能够处理q部分内宏V下面的图显CZ一个工资元素被使用XML Encryption加密在单独的xenc名字I间的员工案:
<?xml version="1.0"?>
<employee id="b3456">
<name>John Smith</name>
<title>Senior Analyst</title>
<salary>
<xenc:EncryptedData>
<xenc:CipherData>
<xenc:Ciphervalue>AbC234ndZ...</xenc:Ciphervalue>
</xenc:CipherData>
</xenc:EncryptedData>
</salary>
</employee>
只有员工自己或被授权的h力资源代表才能够解密<Ciphervalue>元素中的内容Q看到员工实际的工资?br />
XML Signature
数字{定义了一个获取对M数据q行数字{操作l果的XML模型。与以前的非XML数字{标准不同的是。XML数字{既是Z解决了互联网和XML应用中所带来的问题,但它又充分利用了互联|和XML?
XML Signature与隐U密切相养I因ؓQ首先在?NET My Services和Libertyq样的信息共享环境中Q将通过XML Signature对要求应用程序验证的SOAPhq行处理Q第二,用户“肯定”的认可以作ؓXML SignatureQ以防止用户以后再对作出的选择反悔Q如下图所C:
如果用户选择了“Sign Confirmation”(认Q按钮,׃Q用用LU有密码Q生成一个与昄出的HTML|页相关的XML SignatureQƈq行存档Q以防止用户对作出的选择反悔?
当然了,现在的浏览器q不支持完成ҎC的HTML|页的数字签名,更不用说XML Signature了。但扩展览器功能,使它支持{的技术已l问世了Q最lXML Signature技术也会得到支持?br />
WS-Security
WS-Security是由微Y提出的一个有兛_SOAP消息中添加安全元数据的提案。在q里Q我们将讨论一个从NET My Servicesh用户资料的网站,它有二个斚w与WS-Security有关Q?br />
1. h用户资料的应用程序将使用WWS-Security机制获得.NET My Services的认证,以便.NET My Services定该用h否被授予了在光U策略中描述的权限?
2. q回的用戯料的机密性将通过WS-Security对加密功能的支持得到保障。?br />
Z保证只有被授权的用户能够讉K相关资料Q网站必首先对用户的n份进行认证。应用程序ƈ不直接向.NET My Services认证Q而是向微软的Passport服务认证Q以获得一个o牌。然后应用程序再把o牌提交给NET My ServicesQ在对o牌进行验证ƈ认它是来自Passport后,.NET My Services确认请求符合用L隐私{略。然后就会接受请求,q在SOAP响应中返回请求的资料。?br />
下面是一个SOAP客户端向.NET My Servicesh资料的例子,它说明了WS-Security名字I间和HSDLQ?NET My Services的数据处理语aQ的元素。ؓ了简单v见,我们在下面的代码中活力了实际的名字空间定义:
<SOAP:Envelope>
<SOAP:Header>
<wsse:Security>
<wsse:BinarySecurityToken wsse:valueType="wsse:Kerberosv5"
EncodingType="wsse:Base64Binary" Id="token">
MIIEZzCCA9CgAwIBAgIQEmtJZc0...
</wsse:BinarySecurityToken>
<dsig:Signature>
<dsig:Reference="#busmsg"/>
<dsig:SignatureMethod Algorithm="#hmac-sha1">
<HMACOutputLength>128</HMACOutputLength>
</dsig:SignatureMethod>
<dsig:Signaturevalue>IU(89.Hl8*.</dsig:Signaturevalue>
<dsig:KeyInfo>
<wsse:SecurityTokenReference>
<wsse:Reference URI="#token"/>
</wsse:SecurityTokenReference>
</disg:KeyInfo>
</dsig:Signature>
</wsse:Security>
</SOAP:Header>
<SOAP:Body>
<hsdl:queryRequest id="busmsg">
<xpQuery select='/contact[Name="Smith"]'/>
</hsdl:queryRequest>
</SOAP:Body>
</SOAP:Envelope>
Z对SOAP消息q行认证和授权,.NET My Services应当执行下面的处理:
1、用与Passport׃n的私钥加?lt;BinarySecurityToken>元素中的Kerberos说明书。说明书中包含:
A、发求的用户的Passport的PUID。?br /> B、发求的应用E序的标识符。?br /> C、时的对话兛_字。?br /> 2、检查XML Signature中的<Reference>元素Q判断SOAP消息中的哪个元素是计出来的MAC。?br /> 3、用从Kerberos证书中解析出来的对话兛_字,计算出相同元素的MAC。?br /> 4、对计算出的MAC与由发出h的应用程序提供的MACq行比较。?br /> 5、如果二个MAC相同Q则比较被认证的发出h的应用程序和用户的隐U政{,判断其请求是否应当被批准?br />
下面是一个SOAP响应的例子,我们假设在SOAP响应中返回的用户资料是机密资料,用户的隐U政{要求在传输q程中保证资料的保密性:
<SOAP:Envelope>
<SOAP:Header>
<wsse:Security>
<xenc:EncryptedData id="encdata">
<xenc:EncryptionMethod
Algorithm='http://www.w3.org/xmlenc#3des-cbc'/>
<xenc:CipherData>
<xenc:Ciphervalue>JS*du89sad7</xenc:Ciphervalue>
</xenc:CipherData>
</xenc:EncryptedData>
</wsse:Security>
</SOAP:Header>
<SOAP:Body>
<hsdl:queryResponse id="busmsg">
<xenc:CipherReference idref="#encdata"/>
</hsdl:queryResponse>
</SOAP:Body>
</SOAP:Envelope>
为适当的h提供适当的访问权限和首先拥有信息同样重要Q如果不是更重要的话Q。可扩展讉K控制标记语言Q或 XACMLQ提供了创徏{略和规则来控制信息讉K的机制。本文中Q作?Manish Verma l关?XML 问题的讨论,介绍如何在应用程序中集成 XACML?br />关于 XML 安全的上一文章中Q我讨论了安全性断a标记语言QSecurity Assertion Markup LanguageQSAMLQ。本文将讨论可扩展访问控制标记语aQƈ从上一期留下的问题开始。SAML 提供了进行验证和授权断言以及传递断a的机Ӟ?XACML 则提供了定义q行必要的授权决{所需规则的语a?/p>
比如Q假设这样一个场景:某一Mh讉K目标资源Q策略执行点QPEPQ在军_目标资源发布给M之前Q要使用{略决策点(PDPQ进行检查。访问目标资源请求的生成Q以及后l的允许或拒l访问响应,都属?SAML 的范围。XACML 解决?PEP ?PDP 之间的策略决{交换问题?/p>
讉K控制 XACML
XACML 的初h开发一访问控制和授权pȝ的标准。目前多数系l都以专有的方式实现讉K控制和授权?/p>
典型的访问控制和授权场景包括三个主要实体Q主体、资源和动作以及它们的属性。主体请求得到对资源执行动作的权限。比如,讉Kh“允许胦务经理在财务服务器上的发文件夹中创建文件”中Q主体是“胦务经理”,目标资源是“胦务服务器上的发票文g夹”,动作是“创建文件”?/p>
在专有访问控制系l中Q这些实体及其属性的信息保存在资料库中。这U资料库UCؓ讉K控制链表QACLQ。不同的专有pȝ有不同的实现 ACL 的机Ӟ因此难以交换和共享信息?/p>
XACML 的目?br />
XACML 主要解决以下问题:
1Q创ZU可UL的、标准的方式来描q访问控制实体及其属性。?br /> 2Q 提供一U机Ӟ以比单地拒绝讉K或授权访问更l粒度的控制讉KQ也是_在“允许”或 “拒l”之前或之后执行某些操作?br />
XACML ?SAMLQ差别与cM之处
XACML 体系l构?SAML 体系l构是紧密相关的。它们有很多相同的概念,要处理的问题域也在很大程度上重叠Q验证、授权和讉K控制。但是在同一问题域中Q它们要解决的是不同的问题。SAML 要解决的是验证,q提供一U机Ӟ在协同实体间传递验证和授权决策Q?XACML 则专注于传递这些授权决{的机制?/p>
SAML 标准提供了允许第三方实体h验证和授权信息的接口。内部如何处理这些授权请求则?XACML 标准解决。XACML 不但处理授权hQ而且q定义了一U机Ӟ来创行授权决{所需的规则、策略和{略集的完整基础设施。我在 XACML 详解中详l说明这些概c?/p>
既然 SAML ?XACML 分n同一个领域,那么q两U规范很可能最l会合ƈ成一个规范,希望如此?/p>
XACML 体系l构
XACML 由图 1 中所C的多个lgl成。其中一些组件还可以?SAML ׃n。共享的lg用红U框标记?/p>
?1. XACML 主要lg
授权h到达{略执行点(PEPQ。PEP 创徏一?XACML hq发送到{略决策点(PDPQ,后者评估请求ƈq回一个响应。该响应可以是允许访问的Q也可以是拒l访问的Qƈh适当的义务。本文稍后部分将解释q些义务?/p>
PDP 评估h中的相关{略和规则后会作出决{。可以应用的{略有多U,PDP q没有评估所有的{略Q而是Ҏ{略目标选择相关的策略进行评估。策略目标包括关于主体、动作和其他环境属性的信息。后面的{略目标创徏一节中说?PDP 选择评估{略的完整过E?/p>
Z获得{略QPDP 要用到策略访问点QPAPQ,PAP ~写{略和策略集Q供 PDP 使用。PDP 也可以调用策略信息点QPIPQ服务检索与M、资源或者环境有关的属性倹{PDP 作出的授权决{被发送到 PEP。PEP 履行义务QƈҎ PDP 发送的授权决策允许或拒l访问?/p>
XACML 详解
Z说明 XACML 的不同组Ӟ我们以一个具体的讉KhZQ创建所需的全?XACML lg。访问请求如下:M mverma@secf.com 属于 owner l(M的属性)Q它试对资?file:///D:/Documents/Administrator/Desktop/Project Plan.html 执行 open 动作。创建所有必需?XACML lg之后Q应该能够获得该h的授权决{?/p>
要记住,XACML 有三个顶层组Ӟ{略、PEP ?PDP。ؓ定义的请求创?XACML 基础设施的过E,也是紧密围绕q三个组件进行的。图 2 说明了这些组件之间的联系Q?/p>
?2. {略语言模型
首先要创Z个策略处理请求?
XACML {略
{略包括Q一l规则、规则组合算法的标识W、一l义务和一个目标。这是 XACML 最主要的方面。XACML 的多数动作发生在{略中?/p>
现在说明如何创徏能够处理该请求的{略Q策略的范围应该比请求的范围qѝ您可以创徏一个这L{略Qsecf.com 名称I间中有电子邮g名的所有用户都可以对资?file:///D:/Documents/Administrator/Desktop/Project Plan.html 执行M操作。注意,{略比请求更具一般性?/p>
规则l合法
规则l合法l合{略中所有规则的l果得到最l的授权决策。XACML 定义了下面的规则l合法Q也可定义自q法Q:
1Qeny-overridesQ拒l覆盖)Q?只要有一条规则的评估?DenyQ那么最l授权决{也?Deny?
Ordered-deny-overridesQ有序拒l覆盖)Q?与拒l覆盖相同,只不q评估相兌则的序与将规则d到策略中的顺序相同?
2Qermit-overridesQ允许覆盖)Q?只要有一条规则计的评估?PermitQ则最l授权决{也?Permit?
3Qrdered-permit-overridesQ允许按序覆盖Q: 与允许覆盖相同,只不q评估相兌则的序与规则添加到{略中的序相同?
4Qirst-applicableQ最先应用)Q?遇到的第一条相兌则的评估l果作ؓ最l授权决{的评估l果?br />
{略包括几种子组?/strong>Q?strong>目标、规则、规则组合算法和义务。理解策略就必须理解q些子组ӞsubcomponentQ。现在来看看各种子组件的重要性:
目标QTargetQ:
清单 1. 创徏{略 // Create policy identifier and policy description // Rule combining algorithm for the Policy URI combiningAlgId = new URI(OrderedPermitOverridesRuleAlg.algId); CombiningAlgFactory factory = CombiningAlgFactory.getInstance(); RuleCombiningAlgorithm combiningAlg =
// Create the rules for the policy List ruleList = createRules(); // Create the policy // Display the policy on the std out 清单 1 说明?policy 的创E。真是这样吗Qpolicy 创徏的主要部分是子组件的创徏。该清单仅仅说明了如何将q些子组件组合成 policy 对象。不q,它确实说明了 policy 的Ml构。策略的l成q程如下Q?/p>
选择{略的规则组合算法。我使用?ordered-permit-override 法Q因此将按照{略中规定的序评估规则?
{略目标创徏 然后说明如何通过~程来实现这些目标。XACML 提供了一U称?AttributeDesignator 的机Ӟ用它来比较请求与{略目标中的属性倹{?/p>
利用 AttributeDesignatorQ可以通过定义属性名和类型来指定一个属性。此外,q可以指定属性|也就是在目标中规定与h中的属性D行比较的那个倹{要q行比较Q需要选择一个预|的函数。该函数以及 AttributeDesignator 都可以用来创?TargetMatch 对象。您可以创徏多个 TargetMatch 对象Q每个对象对应一个属性。同一cȝ所?TargetMatch 对象攑֜一个列表中Qƈ传递给 Target 对象。这?Target 对象是用来创徏 Policy 的目标对象?/p>
{略的Ş式应该如下所C:“允?secf.com 名称I间中列有电子邮件名的Q何用户对资源 file:///D:/Documents/Administrator/Desktop/Project Plan.html 执行M动作。”对于该{略Q可以创建包含两个属性的目标Q分别用于主体和资源。不需要ؓ动作创徏属性,因ؓ要创建的{略对动作没有Q何限制?/p>
清单 2 说明了策略目标的创徏。因比较h中主体电子邮件字D늚值和目标中规定的字段的|因此对于MQ可以在目标中指定属?urn:oasis:names:tc:xacml:1.0:data-type:rfc822NameQ电子邮?IDQ。在目标中定义属性类型(urn:oasis:names:tc:xacml:1.0:data-type:rfc822NameQ、属性名Qurn:oasis:names:tc:xacml:1.0:subject:subject-idQ和比较函数Qurn:oasis:names:tc:xacml:1.0:function:rfc822Name-matchQ?该函数将目标中规定的属性gh中具有相同属性的D行比较。资源类?http://www.w3.org/2001/XMLSchema#anyURI 的属性也是按照类似的步骤q行比较的? 清单 2. 创徏{略目标 public static Target createPolicyTarget() throws URISyntaxException { // Attributes of Subject type List subject = new ArrayList(); URI subjectDesignatorType = StringAttribute subjectvalue = new
// get an instance of the right function for matching TargetMatch subjectMatch = new TargetMatch( subject.add(subjectMatch);
List resource = new ArrayList(); URI resourceDesignatorType = // Match function for the resource-id attribute AttributeDesignator resourceDesignator = AnyURIAttribute resourcevalue = // Get an instance of the right function for matching TargetMatch resourceMatch = new TargetMatch( resource.add(resourceMatch); // Put the subject and resource sections into their lists // Create and return the new target. No action type
规则的创?br /> 规则是策略中最重要的子lg。如前所qͼ规则实质上是评估 Permit、Deny、Indeterminate ?NotApplicable 的条件?/p>
l箋创徏处理授权hQ请参阅“XACML 详解”中的第一张图片)所需要的 XACML lgQ现在需要创建适当的规则。创则实质上是创徏相应的条Ӟ如清?3 所C。查看代码,可以看到它完成了以下三项操作Q?/p>
创徏规则目标? 要创建的W合该请求的规则应该是:“如果主?mverma@secf.com 属于l?ownerQƈ试打开资源 file:///D:/Documents/Administrator/Desktop/Project Plan.htmlQ那么允许访问。?创徏q样的规则,首先要创建目标,以便针对处理的h评估规则。创则目标的方式cM于策略目标的创徏方式。然后,规则的 effect 定义?Permit。ؓ了让规则q回 effect 的|兌条g必须q回 True。清?4 中的代码说明了条件的创徏?/p>
清单 3. 创徏规则 public static List createRules() throws URISyntaxException { // Step 2: Define the effect of the rule // Step 3: Get the target for the rule // Step 4: Get the condition for the rule // Step 5: Create the rule // Create a list for the rules and add the rule to it List ruleList = new ArrayList(); return ruleList; } AttributeDesignator q回?br /> AttributeDesignator 可能Z个属性返回多个|因ؓh可能包含多个匚wQ。ؓ此,XACML 有一U称子(bagQ的Ҏ数据cd。袋子是允许重复的无序集合。AttributeDesignator Lq回袋子Q即使只有一个返回倹{一旦返回一个袋子,将对袋子中的g预期D行比较,以便作出授权决策。对于目标,不需要用函C袋子中提取Q何|但是对于条gQ却需要这样做。这是因为,对于目标QPDP 会自动ؓ AttributeDesignator q回的每个元素应用匹配的函数?br /> 清单 4 说明了规则条件的创徏。与为策略目标创?AttributeDesignator 的方式基本相同,也需要创?AttributeDesignator 对象Q比较请求中的属性值和条g中规定的倹{在q里Q我们感兴趣的属性是M所属的 group。如果要让条件返?TrueQ那?group 属性的值必L owner?/p>
惟一要补充的是,必须满以下条gQ用函C AttributeDesignator q回的多个g提取一个倹{该例中使用函数 urn:oasis:names:tc:xacml:1.0:function:string-one-and-only。关于处?AttributeDesignator 中的多个值的更多信息Q请参阅 AttributeDesignator q回倹{?/p>
正如从清?4 中可以看到的Q需要创?AttributeDesignator 对象来定义希望与h中的D行比较的属性。比较算法是用来比较属性值的。然后要定义可以?AttributeDesignator q回的那些g选出一个值的函数。最后创?Apply 对象Q它cM于目标中创徏?TargetMatch 对象。Apply 对象的目的是对从袋子Q由 AttributeDesignator q回Q中选择的值应用比较函敎ͼ它与条件中规定的D行比较?/p>
清单 4. 创徏规则条g public static Apply createRuleCondition() throws URISyntaxException { // Define the name and type of the attribute // Pick the function that the condition uses // Choose the function to pick one of the List applyArgs = new ArrayList(); factory = FunctionFactory.getGeneralInstance(); // Create the AttributeDesignator // Create the Apply object and pass it the // Add the new apply element to the list of inputs StringAttribute value = new StringAttribute("owner"); // Finally, create and return the condition q样Q策略创ZQ务就完成了。我们简单回一下策略创E。首先,要创建必要的{略子组Ӟ{略目标、规则和规则l合法。不用ؓ{略创徏义务Q因为它们是可选的。创则实质上意味着创徏规则目标和条Ӟq些都用它们自q代码清单作了说明。这里用的所有的{略子组仉是用来创建策略的?/p>
创徏处理授权h所需 XACML lg的下一步是创徏 PEP。PEP 的作用是什么呢Q它为您创徏的所有这?XACML lg创徏授权hQ?/p>
{略实施点(PEPQ?/strong>
现在Q您已经看到了策略的创徏?PEP h的生成,剩下的只有创?PDP 了?/p>
{略决策点(PDPQ?/strong>
因ؓ XACML 规范没有规定把策略和h传递给 PDP 以便评估h的具体机Ӟ所以可以选择您认为方便的M机制。该例中Q策略和h是作为命令行参数传递给 PDP?/p>
注意QPDP 仍然Z需要服务的hcd。它是一U通用lgQ接受Q何请求和相关的策略集合,qؓ可用的策略评估请求。清?6 说明了如何创?PDPQ以及如何用它来评估来自 PEP 的请求。PDP 创徏和请求评估的详细q程在清单 6 后介l?/p>
清单 6. 创徏 PDP public static void main(String[] args) throws Exception { requestFile = args[0]; for (int i = 1; i < args.length; i++) // Step 3: Set up the PolicyFinder that this PDP will use // Step 4: Create the PDP // Get the request send by the PEP // Step 5: Evaluate the request. Generate the response. // Display the output on std out 下面一步步地说?PDP 的创建和h评估Q?/p>
从命令行参数获得h和策略文件? 到此为止Q处理请求需要创建的三种主要 XACML lg —?{略、PEP ?PDP —?都已l介l完毕,q给Z相应的例子?/p>
l束?br />讉K控制几乎是所有应用程序或多或都要用到的一个领域。XACML 是将该领域标准化的一ơ尝试。虽?XACML 是一U冗长的语言Q但是一旦掌握了其基本概念和语言,很Ҏ构造访问控制机制? 本文介绍了创建基本的 XACML lg的过E: {略Q包括规则和{略目标
每个{略只有一个目标。该目标有助于确定策略是否与h有关。策略和h的相x决定了是否要ؓh评估该策略。这是通过定义目标中的三类属性(M、资源、动作)及其属性值来实现的。目标中不一定都有这三类属性。将q些属性的gh中具有相同属性的D行比较,如果匚wQ对其应用某些函C后,会看到它们是否匚wQ,则认{略是相关的Qƈ对其q行评估?
规则Q一个策略可以与多条规则相关联。每条规则由条g、结果和目标l成。?br /> 条g是关于属性的陈述Q评估结果ؓ True、False ?Indeterminate。?br /> l果是符合规则的预期后果Q值可以ؓ Permit ?Deny。?br /> 目标Q?/strong>与策略中的目标相同,都有助于定规则是否与请求有养I实现的机制也与策略中的目标的实现机制cM?br />
规则的最l结果取决于条g的评估。如果条件返?IndeterminateQ则该规则返?Indeterminate。如果条件返?FalseQ则规则q回 NotApplicable。如果条件返?TrueQ则q回 Effect 元素的|可以?Permit ?Deny。?br />
规则l合法Q如上一条规则所qͼ一个策略可以包含多条规则。不同的规则有可能得到冲H的l果。规则组合算法负责解册U冲H,每一{略、每一h都得C个最l结果。每个策略只能用一U规则组合算法。详情请参阅规则l合法。?br />
义务Q要知道QXACML 的目标之一是提供更高层ơ的讉K控制Q而不仅仅是允许和拒绝决策Q义务是实现q种控制的机制。义务是 PEP 必须与授权决{的实施一h行的动作。在评估{略之后Q特定的义务与授权决{一起发送给 PEP。除了强制实施授权决{外QPEP q负责执行义务所规定的操作?br />{略的创?br />
q一节深入探讨策略创Z码。首先要创徏 policy 对象Q参见清?1Q和需要的子组件?本文中的代码例子都?Sun ?XACML 实现Q请参阅参考资料)?/p>
URI policyId = new URI("ProjectPlanAccessPolicy");
String description =
"This AccessPolicy applies to any account at secf.com "
+ "accessing file:///D:/Documents/Administrator/Desktop/Project Plan.html.";
(RuleCombiningAlgorithm) (factory.createAlgorithm(combiningAlgId));
// Create the target for the policy
Target policyTarget = createPolicyTarget();
Policy policy =
new Policy(
policyId,
combiningAlg,
description,
policyTarget,
ruleList);
policy.encode(System.out, new Indenter());
创徏{略的目标。目标创建有点复杂,它需要专门的代码清单和说明。清?2 说明了策略的目标创徏?
创徏{略相关的规则。与目标相同Q规则创Z是一个复杂的q程Q需要专门的清单。清?3 专用于说明规则创建?
创徏所有必需的策略子lg之后Q用它们创徏 policy 对象?
?policy 对象保存到文件中以便传递给 PDP?br />
下面几小节说明策略子lg的创建。首先是目标创徏Q最后以规则创徏和相x件结束关于策略创建的讨论?/p>
目标创徏是创建策略的一个重要方面。目标是估请求选择相关{略的机制。ؓ了创建策略目标,需要定义属于主体、资源和动作q三U类型的实体的属性和属性倹{当 PDP 评估hӞ它将查找目标属性gh中的属性值相同的{略?/p>
List subjects = new ArrayList();
List resources = new ArrayList();
// Multiple subject attributes can be specified. In this
// case only one is being defined.
new URI("urn:oasis:names:tc:xacml:1.0:data-type:rfc822Name");
URI subjectDesignatorId =
new URI("urn:oasis:names:tc:xacml:1.0:subject:subject-id");
// Match function for the subject-id attribute
String subjectMatchId =
"urn:oasis:names:tc:xacml:1.0:function:rfc822Name-match";
AttributeDesignator subjectDesignator =
new AttributeDesignator(
AttributeDesignator.SUBJECT_TARGET,
subjectDesignatorType,
subjectDesignatorId,
false);
StringAttribute("secf.com");
// get the factory that handles Target functions
FunctionFactory factory =
FunctionFactory.getTargetInstance();
// subject attributes
Function subjectFunction =
factory.createFunction(subjectMatchId);
TargetMatch.SUBJECT,
subjectFunction,
subjectDesignator,
subjectvalue);
// Attributes of resource type
// Multiple resource attributes can be specified. In this
// case only one is being defined.
new URI(" URI resourceDesignatorId =
new URI("urn:oasis:names:tc:xacml:1.0:resource:resource-id");
String resourceMatchId =
"urn:oasis:names:tc:xacml:1.0:function:anyURI-equal";
new AttributeDesignator(
AttributeDesignator.RESOURCE_TARGET,
resourceDesignatorType,
resourceDesignatorId,
false);
new AnyURIAttribute(
new URI("file:///D:/Documents/Administrator/Desktop/Project Plan.html"));
// resource attribute
Function resourceFunction =
factory.createFunction(resourceMatchId);
TargetMatch.RESOURCE,
resourceFunction,
resourceDesignator,
resourcevalue);
subjects.add(subject);
resources.add(resource);
// attributes have been specified in the target
return new Target(subjects, resources, null);
}
定义规则l果?
创徏条g?br />其中的两个:创徏规则目标和定义规则结果,非常单。第三点创徏条g比较复杂Q后面还详l说明?/p>
// Step 1: Define the identifier for the rule
URI ruleId = new URI("ProjectPlanAccessRule");
String ruleDescription = “Rule for accessing project plan";
int effect = Result.DECISION_PERMIT;
Target target = createRuleTarget();
Apply condition = createRuleCondition();
Rule openRule = new Rule(ruleId, effect,ruleDescription, target, condition);
ruleList.add(openRule);
List conditionArgs = new ArrayList();
// to be used in the condition
URI designatorType = new URI(" URI designatorId = new URI("group");
FunctionFactory factory = FunctionFactory.getConditionInstance();
Function conditionFunction = null;
try {
conditionFunction =
factory.createFunction(
"urn:oasis:names:tc:xacml:1.0:function:" + "string-equal");
} catch (Exception e) {
return null;
}
// multiple values returned by AttributetDesignator
Function applyFunction = null;
try {
applyFunction =
factory.createFunction(
"urn:oasis:names:tc:xacml:1.0:function:"
+ "string-one-and-only");
} catch (Exception e) {
return null;
}
AttributeDesignator designator =
new AttributeDesignator(
AttributeDesignator.SUBJECT_TARGET,
designatorType,
designatorId,
false
null);
applyArgs.add(designator);
// function and the AttributeDesignator. The function
// picks up one of the multiple values returned by the
// AttributeDesignator
Apply apply = new Apply(applyFunction, applyArgs, false);
// to the condition along with the Attributevalue
conditionArgs.add(apply);
conditionArgs.add(value);
return new Apply(conditionFunction, conditionArgs, true);
}
PEP Ҏh者的属性、请求的资源、动作和其他信息创徏h。在q里Q我展C创求的机制。ؓ了方便v见,我将再次使用该请求:M mverma@secf.com 属于 owner l(M的属性)Qƈ试对资?file:///D:/Documents/Administrator/Desktop/Project Plan.html 执行 open 动作。要创徏q样的请求,您需要两个主体属性、一个资源属性和一个动作属性。两个主体属性是 rfc822NameQ电子邮?IDQ和M所属的l。资源属性是资源?URIQ动作属性是打开资源的动作。清?5 说明?PEP 和所有这些属性的创徏?/p>
PDP 针对{略评估hQƈq回响应?/p>
if (args.length < 2) {
System.out.println("Usage: <request> <AccessPolicy> [policies]");
System.exit(1);
}
// Step 1: Get the request and policy file from the command line
String requestFile = null;
String[] policyFiles = new String[args.length - 1];
policyFiles[i - 1] = args[i];
// Step 2: Create a PolicyFinderModule and initialize it
// Use the sample FilePolicyModule, which
// is configured using the policies from the command line
FilePolicyModule filePolicyModule = new FilePolicyModule();
for (int i = 0; i < policyFiles.length; i++)
filePolicyModule.addPolicy(policyFiles[i]);
//
PolicyFinder policyFinder = new PolicyFinder();
Set policyModules = new HashSet();
policyModules.add(filePolicyModule);
policyFinder.setModules(policyModules);
PDP pdp = new PDP(new PDPConfig(null, policyFinder, null));
RequestCtx request =
RequestCtx.getInstance(new FileInputStream(requestFile));
ResponseCtx response = pdp.evaluate(request);
response.encode(System.out, new Indenter());
}
创徏 PolicyFinderModuleQƈ使用 FilePolicyModule 对象其初始化。用命令行中的{略配置 FilePolicyModule。PolicyFinderModule 是下面三个发现程序模块(finder moduleQ之一Q?
PolicyFinderModule
AttributeFinderModule
ResourceFinderModule
q些模块?SUN XACML 实现用来发现属性、策略和资源的机制?
讄 PDP 用的{略发现E序?
通过初始?PDP cL创徏 PDP。把使用 FilepolicyModule 配置?PDPConfig 对象提供l?PDP 构造函数?
?PDP 调用 evaluate Ҏ评估来自 PEP 的请求,q将q回授权决策。如果完全按照本文所q创?XACML lgQPDP 提?Permit 授权决策?br />授权决策传回 PEP。可以选择把决{发?PEP 的机制?/p>
PEP
PDP
掌握q些知识之后Q就可以在当前和来的应用程序中采用 XACML 处理讉K控制?/p>
l构化信息标准促q组l(OASISQ徏立的安全标准SAMLQ安全声明标记语aQ,是基于XMLQ可扩展标记语言Q面向Web服务的架构。SAML通过因特|对不同的安全系l的信息交换q行处理?
了解SAML
SAMLq不是一Ҏ技术。确切地_它是一U语aQ进行单一的XML描述Q允怸同安全系l生的信息q行交换。通常来说Q一个企业物理或逻辑的范围已l界定了企业的IT安全Q然而,׃在线合作需要共享更可靠的安全服务环境,因此IT安全来成Zh们关注的重点问题?
SAML正是决网l安全性问题而发挥其作用。SAML在传l意义上的安全界定与商务站点之间Q徏立了一U安全信息的交换渠道。SAML作ؓ安全信息交换?中间?Q促使一个站点上的交易业务能够在另一个信ȝ站点上得到处理完成。由此可见,实现交易双方商业协议或合作的一个先xӞ是要求用SAML作ؓ׃n的安全架构的一部䆾?/p>
SAML是如何工作的
SAML在标准行业传输协议环境里工作Q例如HTTP、SMTP和FTPQ同时也服务于各U各LXML文g交换框架Q如QSOAP和BizTalk。SAML具备的一个最H出的好处,是用户能够通过因特|进行安全证书移动。也是_使用SAML标准作ؓ安全认证和共享资料的中间语言Q能够在多个站点之间实现单点d?/p>
此外QSAMLq针对不同的安全pȝ提供了一个共有的框架Q允怼业及其供应商、客户与合作伙伴q行安全的认证、授权和基本信息交换。由于SAML是通过XML对现有的安全模式q行描述Q因此它是一个中立的q_q且不需要依赖于供应商的基础l构?/p>
Web览器-SAML声明是由一个Web览器通过cookies或URL链接q行通信?/p>
HTTP - SAML声明通过标题或一个HTTP POST Q从源站点传送到目的站点?/p>
MIME - SAML 声明被封装ؓ一个单一的MIMEQ多用途网际邮件扩充协议)安全包,由消息的有效载荷l成Q例如:一张定购单、或在线银行的信用报告书{等?/p>
SOAP - SAML 声明限制Q约束SOAP文的信标题以保证有效载荷?/p>
ebXML- 电子商务全球化标准提供了一个基于MIME的封装结构,通常用于l定SAML声明q行商业有效载荷?br />
若你所见,SAML使用的对象称为断a或声明。这些声明由值得信Q的权威安全机构,通过使用hQ响应协议(SAMLQuery, SAML QueryResponseQ生ƈ发送。SAML在XML中ؓ认证声明和认证属性徏立了一个数据格式,其参数取决于安全服务产生的基于政{的认证l果?br />SAML的消息格式能够从一个源站点(站点起到SAML认证理机构的作?声明发送给一个接受者。电子商务合作中的事务处理速度得到加快Qƈ且认证环境的复杂性得到全面的化。事实上QSAMLq没有创建安全政{,而是q关的安全权威机构q行制定Q但是SAML些安全政{的表达提供了标准格式,因此安全册能够得到有效地制定?/p>
SAML的工作原?br />1Q用户向认证机构提交证书Q这里的认识机构是指SAML能够识别的Q何安全引擎或商业应用E序Q?br />
2Q认证机构对用户的证书进行断aQƈ且生一个认证声明以及一个或更多的属性声明(例如用户资料信息Q。用L卛_会得到由SAML断言的认证和识别标志?br />
3Q用户用这个SAML标志试讉K一个受保护的资源?br />
4Q最l用户对保护资源的访问请求被PEPQPolicy Enforcement PointQ截取,同时最l用LSAML标志Q认证声明)被PEP提交l属性管理(能够被SAML识别的Q何安全引擎或商业应用E序Q?br />
5Q属性管理或PDPQPolicy Decision PointQ基于自w的政策标准产生一个决定。一旦批准最l用户对保护资源q行讉KQ就会生一个附加在SAML标志上的属性声明。最l用LSAML标志p够以单点d方式呈现l信ȝ商业伙伴?br />
SAML如何使用
介绍几种SAML的用方?/strong>
单点d
举一个简单的例子Q用户在一个站点上取得认证授权Q当用户需要访问另一个相关站点的资源Ӟ目的站点Q保护资源的持有者)能够使用SAML从源站点调取用户的证书信息。此时SAML对信息交换的处理发生在后収ͼ因此用户的资源实际上被不同的安全pȝq行了定位?/p>
授权服务
通常来说Q当一个用戯求访问一个动态保护的或受限制的Web 资源Ӟ讉Kh已被传递给一个后端应用程序。SAML使合作组l的后端安全架构怺作用Q确定是否他们准予用L讉Kh?/p>
B2B
在B2B情Ş中,参与在线商业合作的双方能够利用SAMLQ允总们各自的安全架构彼此q行信息交换Q从而商业zd得到安全快捷的进行。或者,合伙人通过使用值得信Q的第三方SAML B2B服务Q在交易q程中对安全信息q行交换和断a?/p>
会话
当用户采用单点登录方式ƈ且保持会话参数和通过不同资源站点的数据时QSAML能够允许用户在不同站点自pq。源站点提供证书信息Q目的站点保持会话对所需要的数据q行验证。在q个q程中,用户可能q没有意识到后台正在q行的相兛_全处理?/p>
掌握SAML的实际应用知?br />
企业理者需要知道SAML能够提供哪些服务。SAML促进了不同安全系l之间的互操作性,是Web服务功能性方面的一大发展。在许多情Ş中,理越来越需要对安全问题q行监督Qƈ且实现安全标准的通信?br />
在过ȝ三年中,Z开发出了许多关于信息安全(Information SecurityQ的新标准。其中最Zh们所认可的是Web Services安全性(Web Services SecurityQWSSQ、安全性断a标记语言QSecurity Assertion Markup LanguageQSAMLQ和可扩展访问控制标记语aQExtensible Access Control Markup LanguageQXACMLQ。本文会单介l这三者,包括它们是如何开发出来的、ؓ什么需要它们、如何用它们、它们之间以及它们与现有各种安全性标准之间的兌。以后的文章会对q些内容q行更详l的介绍?/p>
?/strong>
WSS、SAML和XACML之间有许多共性。或许最明显的就是它们都使用XML表示信息。其ơ是Q因三种可用的安全服务都已经在计机pȝ中应用多q了Qؓ了更加适用于大型分布式环境Q如互联|,它们都具有一些特定的功能。此外,三者都参考ƈl合了现有的安全性标准,q尽量减对已有功能的重复?/p>
两个主要原因促三者都采用了XML技术。第一QXML使它们便于扩展,以便可以以一U原有格式无法实现的方式来满xU特D需求。第二,XML支持采用大量可用的Y件工兯行处理的实现。对于WSS来说Q还有一个原因,卻IWSS被设计ؓ支持与SOAP的语法和处理模型q行紧密集成Q而SOAP是用XML定义的?/p>
SAML
授权和审计跟t是常见的安全服务。以前,大多数系l设计时都假讑ց问控制决定所必需的所有信息都由单个系l来处理Qƈ且所有要记录的数据都攑֜审计跟踪中。但是,大规模分布式pȝ通常是由多个l织使用各种产品建立的。这意味着用户可能要由不同的验证方使用不同的方法进行验证。此外,不同的验证方q要保存有关用户Ҏ和属性的不同信息。集中管理所有这些能力和信息是不现实的。SAML提供了标准格式来表示w䆾验证、用户属性以及请求和接受该标准的协议。这被称n份联盟(Identity FederationQ?/p>
在OASIS的最初开发阶D,SAML只指定了该n份信息的生者与消费者之间的通信。SAML定义了如何创建有关用户属性和w䆾验证事g的断aQ以及如何以一U灵z而可扩展Q以便满_它需求)的方式获得这些信息。SAMLq详l定义了一些常见场景(如:Web单点dQ来保互操作性?/p>
Liberty Alliance Project和Internet2 Shiboleth groupq一步地增强和扩展了SAML。增加了许多新功能,以便支持SAML验证方之间的通信Q更加详l地描述w䆾验证ҎQ注销用户q保护隐U。这些工作又提交lOASISQƈ合ƈ到SAML2.0中,SAML2.0?005q?月成Z个OASIS标准。SAML被设计ؓ用于多种不同的环境,支持使用不同的n份验证和加密Ҏ。它支持各种不同的消息流Q甚臛_以用于不使用XML的遗留环境中?/p>
XACML
XACMLQ也是由OASIS开发的Q是一U表C问控制策略的语言。大多数计算Z业h士都熟悉Z权限或访问控制列表(ACLQ的讉K控制。但是,q些机制~少表示复杂{略Q在现实pȝ中经帔R要用刎ͼ的能力。因此,讉K控制{略通常会嵌入应用程序代码中。这使得更改{略Q或者只是找出哪些策略正在实施)变得很困难?/p>
XACML能够实际C用Q何可用的信息来决定是否该许可对一个资源的讉K。也可以兌附加的动作、被调用的契U和军_Q例如,要求h的数据在90天后删除?/p>
XACML可以Ҏ资源的属性做出决定,包括资源的内Ҏ环境因素Q如日期、时间或位置。它也会考虑Ch兌的各方的Ҏ,比如角色或组成员关系。这可能不只包括h方,q包括其他方Q比如接受数据方或请求中转方?/p>
XACML 2.0?005q?月成Z个OASIS标准。它在具有多个创建策略的理员的大规模环境中q行良好。因为SAML可用于Q何访问控制系l,XACML可以与SAML一起用,或者单独用。有专门的支持它们一起工作的Ҏ?/p>
WSS
WSS指定了如何保护通过|络传递的SOAP消息。它包括w䆾验证、完整性保护和保密性。它没有指定如何实现讉K控制Q但提供了可以用于访问控制的信息。在WSS出现之前Q最常见的保护消息的Ҏ是用SSL或TLS协议。这些协议仍焉用于许多应用程序,但WSS提供了更多的功能和灵zL?/p>
SSL和TLS是对整个消息q行加密Q而WSS允许有选择性地实现加密。例如,它允许应用程序防火墙查没有加密的部分。此外,WSSq支持复杂的多方交互Q这是处理复杂的电子商务事务所需要的?/p>
此外QWSS在基架构选择斚w提供了更大的灉|性。同SSL和TLS一P它也支持X.509技术,q可以用Kerberos、SAML或以前的普通用户名和密码。因为WSS作用于SOAP层,在信息在|络上传输甚臛_Ҏ息进行排队或存储Ӟ它都能发挥作用?/p>
WSS采用W3C所开发的XML数字{QXML Digital SignatureQ和XML加密QXML EncryptionQ标准。WSS通过称为Security的XML元素插入SOAP标题中而发挥作用。其中包含所有有兛_用于消息的n份验证、数字签名和加密的信息。它向接受方提供解密和验证消息所需的信息。密钥和w䆾验证信息可以使用X.509证书、Kerberos ticket、SAML断言或其他方法进行定义?/p>
2004q_WSS 1.0成ؓ一个OASIS标准。现在,WSS 1.1p完成了。由于WSS所提供的灵zL,不同产品间的互操作可能会比较困难。ؓ了解册个问题,Web Services Interoperability Organizationl织(WS-I)正在开发一个配|文Ӟ以便减少可变性,q给Z用WSSQ以及SSL和TLSQ的最佛_c这个Basic Security Profile (BSP)的草案已l公布,q计于2006q初完成。WS-I成员q构Z一个示例应用程序来说明WSS和测试工P可以查消息是否服从BSPQ的正确使用?/p>
l束?/strong>
上面介绍的三个安全性标准在设计时就被赋予了极大的灵zL,q是通过使用XML而实现的。SAML和XACML在几乎所有的环境中都支持w䆾验证服务Q但更适用于大规模分布式系l。在SOAP环境中,WSS提供了明的消息保护Q但是在软g基础架构斚wQ它提供了很多选择。有XML作ؓ其共同的基础Q这三个标准可以有效地共同用,或者也可以单独使用?/p>
XACML是由OASIS technique committee制定的,目前的规范是2.0Q大家可以从q个q接下蝲Q?a >http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=xacml
XACML3.0最q刚出来Q是用来制定administration and delegation of XACML的,我的导师的观点,delegation是属于daministration的一部分?
从上面的q接可以下蝲。?
若大家真的对XACML有兴,必须加入OASIS的mailing listsQ从上面那个q接加入?
Sun什么事情都不落后,他针对XACML已经开发API了,基本上实CXACML1.0的全部规范,2.0也差不多了,你需要从CVS里面下蝲Q另外一点,SUN也有针对XACML实现的讨论的mailing lists.
Sun implemenation of XACML的连接在q里Q?
http://sunxacml.sourceforge.net/
请问谁现在在看RB-XACML profileQ是否可以跟弟讨论一下,里面的user-role assignment如何来弄Q如何将user-role assignment, role-permission assignment整合h?br />
现在介绍一些SAMLQSAML的全U是 SECURITY ASSERTATION MARKUP LANGUAGE。他表示安全的信息传递以断言的Ş式表C。SAML的specification可以在下面的q接Q?
http://www.oasis-open.org/committees/security/
和XACML一P你最好也加入他们的user mailing lists来看别h提出的问题。我现在只简单说明一下SAML有什么用Q详l的Lspecification
SAML实现单点登陆
单点登陆表示用户A在站点A认证登陆了,到用户到辄点B的时候自动登陆,不需要在站点B重新输入用户名和密码再次验证。如何做到这样呢Q需要用SAMLQ站点B会向站点A发出SAML 的认证请求,站点A会回复站点B一个SAML认证断言Q说明用户A在我站点A认证q了Q而站点B信Q站点A来的认证断言。所以。。?
SAML在web services中的应用
web service-securityQsecurity的信息加在soap head信息中,我们安全信息用SAML表达Q将SAML断言攑֜soap head里面
SAML在XACMLl合使用
q个是我研究的东西,也是要做的。因为在分布式系l中Qpolicies可能不在同一个地方,PEP和PDP可能是不同的domain或者applicationQXACMLh和决定等信息最好放在SAML中来传递,也就是SAML2.0 profile of XACML,大家可以去XACML官方|站下蝲Q我在上面一提了XACML的连接了Q。?
若有朋友在用SAML和XACMLl合Q来研究SAML2.0 Profile of XACMLQ请联系弟讨论一下好吗?Q?br />
Web服务的安全模型和安全规范
Web 服务安全性模型引入了一个由各个怺联系的规范组成的集合Q这些规范描qC把安全性功能程序放?Web 服务环境中的Ҏ。体pȝ构被设计成允许对规范q行混合匚wQ实现者能够仅部v他们需要的那部分。这些规范中的第一??Web 服务安全性(Web Services SecurityQ(或称 WS-SecurityQ文??提供了把消息完整性和机密性功能程序添加到 Web 服务中所必需的基本元素,q且提供把安全性o牌(例如Q数字证书和 Kerberos 据Q关联到 SOAP 消息的方法。WS-Security 为正提议?Web 服务安全性模型打下了基础。随着旉的推U,除安全性外Q还引入其它规范来解决安全性策略、信仅R隐U权和授权?br />
讉K控制模型有很多,按照q代来例举有: BLP model, HRU model, The Clark wilson model, The chinese wall model, RBAC model.
ACL and capability lists 是属?protection matrix model中两U实现方式。Idea来自 access control matrix?
XACML是一个access control policyQrequest and response语言Q它的idea来自access control matrix (subject, resource (object), action).她可以用来实C上的几种model?
我的毕业设计中是XACML同时实现了ACL and RBACQ单点登陆是用proxy certificate来实现的。。现在SAML比较成W了,可以用SAML和XACMLl合了。。请问你们有用到SAML 和XACMLl合吗?Q?你们有发表或者提供技术报告否Q?
web service作ؓ一个serviceQclient or another service来访问,需要进行认证和授权。所以在SOAP消息中携带安全因素,是否允许调用service某个function对information objectq行讉KQ可以写access control policy?br /> 关于单点登陆的问题如果通过saml实现Q应该是有着很大实际意义的实玎ͼ如何通过q些实现对分布式用户或者资源的讉K控制不是一个简单的问题Q尤其在分布式策略的制定上也是一个需要通过一定机制划分的问题Q关键在于这U策略的制定应该层次清楚和控制明;
saml的应用prototype希望哪位lz能够提供一下?
SAML 国外Q国内都已经在用了。?
XACML3.0最q刚出来Q是用来制定administration and delegation of XACML的,我的导师的观点,delegation是属于daministration的一部分。?
从上面的q接可以下蝲。。?
若大家真的对XACML有兴,必须加入OASIS的mailing listsQ从上面那个q接加入。?
Sun什么事情都不落后,他针对XACML已经开发API了,基本上实CXACML1.0的全部规范,2.0也差不多了,你需要从CVS里面下蝲Q另外一点,SUN也有针对XACML实现的讨论的mailing lists.
Sun implemenation of XACML的连接在q里Q?
http://sunxacml.sourceforge.net/
请问谁现在在看RB-XACML profileQ是否可以跟弟讨论一下,里面的user-role assignment如何来弄Q如何将user-role assignment, role-permission assignment整合h?br />
现在介绍一些SAMLQSAML的全U是 SECURITY ASSERTATION MARKUP LANGUAGE。他表示安全的信息传递以断言的Ş式表C。SAML的specification可以在下面的q接Q?
http://www.oasis-open.org/committees/security/
和XACML一P你最好也加入他们的user mailing lists来看别h提出的问题。我现在只简单说明一下SAML有什么用Q详l的Lspecification
SAML实现单点登陆
单点登陆表示用户A在站点A认证登陆了,到用户到辄点B的时候自动登陆,不需要在站点B重新输入用户名和密码再次验证。如何做到这样呢Q需要用SAMLQ站点B会向站点A发出SAML 的认证请求,站点A会回复站点B一个SAML认证断言Q说明用户A在我站点A认证q了Q而站点B信Q站点A来的认证断言。所以。。。?
SAML在web services中的应用
web service-securityQsecurity的信息加在soap head信息中,我们安全信息用SAML表达Q将SAML断言攑֜soap head里面
SAML在XACMLl合使用
q个是我研究的东西,也是要做的。因为在分布式系l中Qpolicies可能不在同一个地方,PEP和PDP可能是不同的domain或者applicationQXACMLh和决定等信息最好放在SAML中来传递,也就是SAML2.0 profile of XACML,大家可以去XACML官方|站下蝲Q我在上面一提了XACML的连接了Q?br />
在系l安全方面分为:w䆾认证和访问控Ӟ权限理Q:
w䆾认证、单点登录方面的的技术规范或协议有Kerbos、SAMLQ ?br /> 在访问控Ӟ权限理Q有RBAC、ACL、XACML;
我们已经讲这些技术进行整合,正在开发新的统一w䆾认证与权限管理系l?br />
Web 服务体系架构的关键是能够交付集成的、可互操作的解决Ҏ。通过应用q个安全模型Q确?Web 服务的完整性、机密性和安全性,q对软g商和它们的客h说都臛_重要。将会出台的Web服务基本的安全规范包括:
用于整合的Web服务描述语言、用于认证和授权的安全性声明标记语a、用于渠道保密的安全槽层QSSLQ、用于高度机密的XML加密标准和用于高U授权的XML数字{。此外,其他几项规范也会陆箋出台Q包括:
Web服务安全性规范(包括XML-加密和XML-数字{Q、XML密钥理规范和用于授权的可扩展访问控制标记语a规范{等?
为Web服务提供安全功能和组件的模型需要把现有的流E和技术与来的应用程序的安全性需求集成v来。统一的安全技术就必须把应用程序对安全的需求从特定的机制中抽象出来。目的是让开发者能够容易地使用异类pȝ建立可互操作的安全解x案。成功的Web服务安全Ҏ需要一l灵zȝ、可互操作的基本元素Q通过{略和配|,q些安全性基本元素可以多种安全解决Ҏ成ؓ可行的方案。可行的Web服务安全性机刉要满_包括下列lg的要求:
|络安全?
支持如SSL{提供机密性和完整性的安全传输机制?/p>
XML消息安全?/p>
1)XML数字{Q以便接收方可以证明消息发送方的n份?/p>
2)XML加密Q提供数据元素的机密性能够验证交换。W3C发布XML密钥理服务(XML Key Management ServicesQ简UXKMS)的备忘录Q帮助分发及理在端点之间进行安全通信所需的密钥?/p>
端点验证及授?/p>
1)支持在企业之间交换信息的合同中定义哪些雇员可以用哪些服务。中介体负责审计和服务原始性证明?/p>
2)支持|络内部的、可信Q的第三方验证服务Q例如Kerberos?/p>
安全性服务描q?/p>
1)描述是否支持数字{、加密、验证和授权以及如何支持它们。Web服务h者用服务描q的安全性元素,来查扄合政{要求及其安全性方法的服务端点?/p>
2)OASIS成立了一个技术委员会来定义授权和验证断言(Authorization and Authentication AssertionsQ简USAML)Q帮助端Ҏ受和x讉K控制权?/p>
3)OASIS同时成立了另一个技术委员会来标准化讉K控制权的表达 (eXtensible Access Control Markup LanguageQ简UXACML)Q帮助端点能够以一致的方式解析SAML断言?/p>
XML相关标准化团?Organization for the Advancement of Structured Information StandardsQOASISQ?的加盟企业成立了制定Web服务安全标准"Web Services SecurityQWS-SecurityQ?的技术委员会"Web Services Security Technical CommitteeQWS-Security TCQ?。这是OASIS于美国当地时?002q??3日宣布的?
WS-Security标准的目的是保Web服务应用软g处理数据的完整性及保密性,规定了Web服务协议SOAP的扩展及消息_Message HeaderQ。这是由IBM、微软和VeriSign共同研究制定的?WS-Security融合了多U安全模式、结构和技术,是面向Web服务的标准规g一。各U系l可以通过q_及不依赖语言的方法确保相互兼宏V?/p>
WS-Security 描述通过消息完整性、消息机密性和单独消息认证提供保护质量?SOAP 消息传递的增强。这些机制可以用于提供多U安全性模型和加密技术。WS-Security q提供关联安全性o牌和消息的通用机制。WS-Security 不需要特定类型的安全性o牌。它在设计上是可扩展的Q例如支持多安全性o牌格式)。D例来_客户机可能会提供w䆾证明和他们有特定商业认证的证明?/p>
另外QWS-Security q描q如何对二进制安全性o牌编码。此规范特别描述如何?X.509 证书?Kerberos 据~码以及如何加入难于理解的加密密钥。它q包括可以用于进一步描q消息中包含的凭证特征的扩展性机制?/p>
WS-Security 很灵z,它被设计成用来构建多U安全性模型(包括 PKI、Kerberos ?SSLQ的基础。WS-Security 特别为多安全性o牌、多信Q域、多{格式和多加密技术提供支持。规范提供了三种主要的机Ӟ安全性o牌传播、消息完整性和消息机密性。这些机制本wƈ不提供完整的安全性解x案。相反,WS-Security 是一U构Ӟ它可以与其它 Web 服务扩展和更高的特定于应用E序的协议联合用,以适应多种安全性模型和加密技术。这些机制可以独立用(例如传送安全性o牌)Q或以紧密集成的方式使用Q例如,Ҏ息签名和加密Qƈ提供与用于签名和加密的密钥相关的安全性o牌层ơ结构)?br />
1、WS-Security及有关的规范
下面介绍一个能够满真实企业的Web服务安全性需要的Z标准的体pL构。IBM、Microsoft和Verisign联手制定了有关Web服务安全性的计划和指南,用来开发一l提供保护Web服务安全性的规范。这个安全性模型把不同的安全性技术,比如公用密钥基础架构、Kerberos{集中在一P以保证能够在现有的系l环境中构徏安全的Web服务。通过利用Web服务模型核心处的自然可扩展性,q些规范建立在一些基技术的基础之上Q如SOAP、WSDL、XML数字{(XML Digital Signature)、XML加密(XML Encryption)和SSL技术。这允许Web服务提供者和h者开发满他们应用程序的个别安全性需求的解决Ҏ。这是一个由IBM、Microsoft和Verisign提议的WS-Security规范定义Q用于保护消息完整性和机密性的核心工具Q以及用于把有关安全性的声明与消息关联v来的机制?/p>
目前QSSL、Transport Layer Security(TLS)和IPSec被用于ؓWeb服务应用E序提供传输U别的安全性。它们的安全性功能包括认证、数据完整性和数据机密性,保证点对点Web服务安全性。Web服务应用E序是个多蟩(Multi-Hop)拓扑Q依赖于消息处理中介体{发消息。当传输层之外的中介体接收ƈ转发数据Ӟ数据的完整性和M随数据流动的安全性信息都可能失去。所以,全面的Web服务安全性体pL构必L一个提供端到端安全性的机制?/p>
?所CZؓ提议的Web服务安全性规范组合?/p>
? WEB 服务安全性规范组?/p>
q组规范建立在SOAP标准规范上,包括一个WS-Security的消息安全性模型、一个描qWeb服务端点{略的WS-Policy、一个WS-Trust信Q模型和一个隐U权模型WS-Privacy。在q些规范的基上,可以跨多个信d创徏安全的、可互操作的Web服务Q还可以提供后规范Q例如安全会话WS-SecureConversation、联合信任WS-Federation和授权WS-Authorization。安全性规范、相x动和互操作性概要文件组合在一P方便开发者徏立可互操作的、安全的Web服务。下面简单描q被提议的各个规范:
WS-Security
描述如何向SOAP消息附加{和加密报_q描q如何向消息附加安全?令牌Q比如二q制安全性o牌的X.509证书和Kerberos据。提供了一个通用机制把可扩展的安全性o牌与消息兌h。用XML{和安全性o牌可以确保消息的完整性,消息在传输过E中未被修改。同样地Q用XML加密和安全性o牌可以SOAP消息的一部分保密Q提供消息机密性?/p>
WS-Policy
描述中介体和端点上的安全性策略的能力和限Ӟ比如所需的安全性o牌?所支持的加密算法和隐私权规则。这是可扩展的,q且不会对可以描q的要求和能力的cd做什么限Ӟ此规范识别几个基本的服务属性,包括隐私权属性、编码格式、安全性o牌要求和支持的算法?/p>
WS-Trust
描述使Web服务能够安全地进行互操作的信L型的框架。此规范描述如何 通过创徏安全性o牌保证服务把现有的直接信dpȝ作代理信ȝ基础?/p>
q些安全性o牌保证服务徏立在WS-Security的基上,用一U保证o牌的完整性和机密性的方式传送那些必需的安全性o牌?/p>
WS-Privacy
描述Web服务提供者和h者如何声明主题隐U权首选项和组l隐U权实践声明的模型。通过使用WS-Policy、WS-Security和WS-Trust的组合,商业机构可以声明q指出遵守声明的隐私权策略。此规范描述一个关于如何把隐私权语a嵌入到WS-Policy的描qͼ以及如何使用WS-Security把隐U权声明与消息关联v来的模型Q它q描q如何用WS-Trust机制Q同时ؓ用户首选项和组l实践声明评仯些隐U权声明?/p>
WS-SecureConversation
描述如何理和认证各方之间的消息交换Q包括安全性上下文交换以及建立 和派生会话密钥?/p>
WS-Federation
描述如何理和代理异c联合的环境中的信Q关系Q包括支持联合n份。此 规范定义如何使用WS-Security、WS-Policy、WS-Trust和WS-SecureConversation 规范构徏联合信Q案例Q例如如何把Kerberos和PKI基础架构联合h?/p>
WS-Authorization
描述如何理授权数据和授权策略,如何在安全性o牌内指定声明Q以及这 些声明在端点处将如何被解释。此规范在授权格式和授权语言上是灉|且可 扩展的?/p>
׃q个Web服务安全性模型与C普遍使用的用于认证、数据完整性和数据机密性的现有安全性模型兼容,所以它可以把基于Web服务的解x案与现有的其他安全性模型集成v来。例如,现有技术如SSL为消息提供简单的点对点完整性和机密性,而Web服务安全性模型支持把q些现有的安全传输机制与WS-Security和其他规范集成来提供跨多个中介体和传输协议的端到端完整性和机密性。Public Key Infrastructure(PKI)模型涉及到签发带公用对称密钥的证书的证书机构和声明除密钥所有权之外属性的机构。这U证书的拥有者可以用相关的密钥来表C多U声明。另外,Kerberos模型依靠与密钥分发中?Key Distribution Center)通信Q通过{֏加密的对U密钥来代理各方之间的信仅RWeb服务安全性模型支持安全性o牌服务用公用不对称密钥{֏安全性o牌。现有的信Q模型通常都是Z企业间的协定Q例如UDDI商业注册中心的Web服务。UDDI有多个参与者,它的信Q模型不是Ҏ特定认证机制的要求ؓ信Q定义一个单独的模型Q而是把认证的责Q交给每个节点的信息管理员。每个UDDI中的Web服务可能有自q认证机制q强刉守自q讉K控制{略Q而信d决于服务h者和理其信息的操作员之间的信Q?br />
2、Web服务可靠性及SOAP层安全扩?/p>
由富士通、日立、NEC、Oracle、Sonic软g和Sun{领先IT厂商宣布Q它们将合作发布Web服务可靠?Web Services Reliability)技术规范工作草案。这一WS-Reliability技术规范将通过提供一个更为可靠的传输基础设施Q加快Web服务的采用,以适应企业界各U各L应用需求?br />
WS-Reliability是一个针对开攄、可靠的Web服务讯息递交的技术规范,包括担保递交、复制讯息排除和讯息分类{,使各UWeb服务之间得以q行更可靠的讯息传递。WS-ReliabilityZSOAP协议Q而不局限于基础传输协议?/p>
自从SOAP规范?001q发布以来,SOAP规范的加密性,认证和授权等安全机制一直受Ch们的q泛x。这三个斚w对于M的B2B来说都是很重要的 Q但SOAP标准在制定规范时q没有过多考虑SOAP 的安全性要求。因为SOAP一个很重要的设计目标就在于它的单性,可能的利用已有的标准和协议来实现相应的功能?/p>
SOAP安全的解x案基于三个W3C的XML规范来实玎ͼXML Digital Signature, XML encryption, and XML Key Management Services。SOAP层安全处于传输层和应用层之上Q对SOAP层的安全性进行扩展,把关于安全的五个基本要求应用到整个的SOAP信息中,包括SOAP头以及SOAP体。同Ӟ更多的安全措施也可结合SOAP层安全与传输层以及应用程序来共同解决。(如下?Q?br />
? SOAP层安全扩?/p>
1QSOAP 安全扩展: 数字{ QSignatureQ?/p>
"SOAP Security Extensions: Digital Signature"最初设x利用XML的数字签名(XML Digital Signature syntax [XML-Signature]Q对SOAPq行扩展Q在SOAP的头元素中定义签名属性(<SOAP-SEC:Signature>Q来实现?/p>
2Q安全性o牌(Security TokenQ?-定义安全性o牌表CZ安全性相关的信息Q例如,X.509 证书、Kerberos 据和认证者、来?SIM 卡的Ud讑֤安全性o牌、用户名{等Q?/p>
SOAP规范在SOAP 1.1的头元素里定义了XML Signature 的用,数字{l过加密法计算后的值附加在数据对象后面Q数据接受对象从{中可以验证数据的来源和完整性。加密后的传送信息可避免数据接受者受C造信息的蒙骗。虽然数字签名了提供q些安全服务:信息源的证明--信息的接受者可以确定这条信息的发出者的w䆾Q信息的完整?--信息的接受者可以确定这条信息发出后没有被纂改;不可抵赖?--事物中的M一方事后都不能否认他的行ؓ。但是:数字{没有提供信息认证Q恶意破坏者可以记录一个信息ƈ反复发送(重复dQ,Z避免受这U类型的dQ数字签名必ȝ合一定的Ҏ来保证信息的唯一性,如:旉戻Itime stampsQ或nonces {。签名的日期和时间都附加在消息上,q与消息一L名。添加这些信息可以在中加入扩展元素实现。当数字{用来验证发送方的标识时Q发送者必L供一个私有秘钥等{。SOAP信息也可以用其他安全技术,更多的SOAP安全规范正在不断的完善之中,随着SOAP安全性的增强QSOAP技术会得到来广泛的应用?/p>
3) UDDI安全Q识别与授权
使用UDDI的发布API的关键原则是只允许被授权的用戯行发布或修改UDDI商业注册中心中的数据。每一个分布式的UDDI商业注册中心l护-张唯-的授权用户列表,q跟t所有用户创建的businessEntity或tModel数据。只有信息的创徏者才允许对该信息q行更改或删除?/p>
每个UDDI商业注册中心的实例被UCؓ一个操作入口站?Operator Site)Q操作入口站点被允许定义他自q用户授权机制Q不q所有的{v协议的公qUDDI注册中心操作入口站点都需要满定协议中定义的最安全规范以提供cM的安全机制?br />
?/p>
WSS、SAML和XACML之间有许多共性。或许最明显的就是它们都使用XML表示信息。其ơ是Q因三种可用的安全服务都已经在计机pȝ中应用多q了Qؓ了更加适用于大型分布式环境Q如互联|,它们都具有一些特定的功能。此外,三者都参考ƈl合了现有的安全性标准,q尽量减对已有功能的重复?/p>
两个主要原因促三者都采用了XML技术。第一QXML使它们便于扩展,以便可以以一U原有格式无法实现的方式来满xU特D需求。第二,XML支持采用大量可用的Y件工兯行处理的实现。对于WSS来说Q还有一个原因,卻IWSS被设计ؓ支持与SOAP的语法和处理模型q行紧密集成Q而SOAP是用XML定义的?/p>
SAML
授权和审计跟t是常见的安全服务。以前,大多数系l设计时都假讑ց问控制决定所必需的所有信息都由单个系l来处理Qƈ且所有要记录的数据都攑֜审计跟踪中。但是,大规模分布式pȝ通常是由多个l织使用各种产品建立的。这意味着用户可能要由不同的验证方使用不同的方法进行验证。此外,不同的验证方q要保存有关用户Ҏ和属性的不同信息。集中管理所有这些能力和信息是不现实的。SAML提供了标准格式来表示w䆾验证、用户属性以及请求和接受该标准的协议。这被称n份联盟(Identity FederationQ?/p>
在OASIS的最初开发阶D,SAML只指定了该n份信息的生者与消费者之间的通信。SAML定义了如何创建有关用户属性和w䆾验证事g的断aQ以及如何以一U灵z而可扩展Q以便满_它需求)的方式获得这些信息。SAMLq详l定义了一些常见场景(如:Web单点dQ来保互操作性?/p>
Liberty Alliance Project和Internet2 Shiboleth groupq一步地增强和扩展了SAML。增加了许多新功能,以便支持SAML验证方之间的通信Q更加详l地描述w䆾验证ҎQ注销用户q保护隐U。这些工作又提交lOASISQƈ合ƈ到SAML2.0中,SAML2.0?005q?月成Z个OASIS标准。SAML被设计ؓ用于多种不同的环境,支持使用不同的n份验证和加密Ҏ。它支持各种不同的消息流Q甚臛_以用于不使用XML的遗留环境中?/p>
XACML
XACMLQ也是由OASIS开发的Q是一U表C问控制策略的语言。大多数计算Z业h士都熟悉Z权限或访问控制列表(ACLQ的讉K控制。但是,q些机制~少表示复杂{略Q在现实pȝ中经帔R要用刎ͼ的能力。因此,讉K控制{略通常会嵌入应用程序代码中。这使得更改{略Q或者只是找出哪些策略正在实施)变得很困难?/p>
XACML能够实际C用Q何可用的信息来决定是否该许可对一个资源的讉K。也可以兌附加的动作、被调用的契U和军_Q例如,要求h的数据在90天后删除?/p>
XACML可以Ҏ资源的属性做出决定,包括资源的内Ҏ环境因素Q如日期、时间或位置。它也会考虑Ch兌的各方的Ҏ,比如角色或组成员关系。这可能不只包括h方,q包括其他方Q比如接受数据方或请求中转方?/p>
XACML 2.0?005q?月成Z个OASIS标准。它在具有多个创建策略的理员的大规模环境中q行良好。因为SAML可用于Q何访问控制系l,XACML可以与SAML一起用,或者单独用。有专门的支持它们一起工作的Ҏ?/p>
WSS
WSS指定了如何保护通过|络传递的SOAP消息。它包括w䆾验证、完整性保护和保密性。它没有指定如何实现讉K控制Q但提供了可以用于访问控制的信息。在WSS出现之前Q最常见的保护消息的Ҏ是用SSL或TLS协议。这些协议仍焉用于许多应用程序,但WSS提供了更多的功能和灵zL?/p>
SSL和TLS是对整个消息q行加密Q而WSS允许有选择性地实现加密。例如,它允许应用程序防火墙查没有加密的部分。此外,WSSq支持复杂的多方交互Q这是处理复杂的电子商务事务所需要的?/p>
此外QWSS在基架构选择斚w提供了更大的灉|性。同SSL和TLS一P它也支持X.509技术,q可以用Kerberos、SAML或以前的普通用户名和密码。因为WSS作用于SOAP层,在信息在|络上传输甚臛_Ҏ息进行排队或存储Ӟ它都能发挥作用?/p>
WSS采用W3C所开发的XML数字{QXML Digital SignatureQ和XML加密QXML EncryptionQ标准。WSS通过称为Security的XML元素插入SOAP标题中而发挥作用。其中包含所有有兛_用于消息的n份验证、数字签名和加密的信息。它向接受方提供解密和验证消息所需的信息。密钥和w䆾验证信息可以使用X.509证书、Kerberos ticket、SAML断言或其他方法进行定义?/p>
2004q_WSS 1.0成ؓ一个OASIS标准。现在,WSS 1.1p完成了。由于WSS所提供的灵zL,不同产品间的互操作可能会比较困难。ؓ了解册个问题,Web Services Interoperability Organizationl织(WS-I)正在开发一个配|文Ӟ以便减少可变性,q给Z用WSSQ以及SSL和TLSQ的最佛_c这个Basic Security Profile (BSP)的草案已l公布,q计于2006q初完成。WS-I成员q构Z一个示例应用程序来说明WSS和测试工P可以查消息是否服从BSPQ的正确使用?/p>
l束?/p>
上面介绍的三个安全性标准在设计时就被赋予了极大的灵zL,q是通过使用XML而实现的。SAML和XACML在几乎所有的环境中都支持w䆾验证服务Q但更适用于大规模分布式系l。在SOAP环境中,WSS提供了明的消息保护Q但是在软g基础架构斚wQ它提供了很多选择。有XML作ؓ其共同的基础Q这三个标准可以有效地共同用,或者也可以单独使用?/p>