信息化 频道

如何让SAML适应企业的SOA安全方案

  【IT168 信息化】

  由于作为服务软件的越来越多,更多的机构开始倾向于面向服务架构(SOA),这种环境往往是攻击者的主要目标。这种趋势要求特别设计的技术解决安全性问题,接下来我将描述由安全性断言标志语言(SAML)阐释的方法。

  SAML是在OASIS指导下开发的标准。OASIS管理一系列广泛的标准,这些标准和XML以及像WS-*和SGML这样的Web服务有关。SAML这如其首字母缩略词所显示的那样,通过XML或者HTML标识语言强制执行安全性,使其成为广泛安全方案的一部分。

  使用SAML的最新领域包括由自由联盟计划开发的单一登录计划,本质上和开发ID项目很相似——例如通过WS-Security在基于SOAP服务中使用的通用领域。理解SAML的关键是要理解其断言机制,该断言机制是语言的基石。列表1-1展示了一个SAML断言。

  <saml:Assertion xmlns:saml=a  urn:oasis:names:tc:SAML:2.0:assertiona 
  Version="2.0"
  IssueInstant="2008-10-15T12:00:00Z">
  <saml:Issuer Format=urn:oasis:names:SAML:2.0:nameid-format:entity>
  http://www.acme.org
  </saml:Issuer>
  <saml:Subject>
  <saml:NameID
  Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">
  j.smith@acme.org
  </saml:NameID>
  </saml:Subject>
  <saml:Conditions
  NotBefore="2008-10-15T12:00:00Z"
  NotOnOrAfter="2008-10-15T12:10:00Z">
  </saml:Conditions>
  <saml:AuthnStatement
  AuthnInstant="2008-10-15T12:00:00Z" SessionIndex="67775277772">
  <saml:AuthnContext>
  <saml:AuthnContextClassRef>
  urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport
  </saml:AuthnContextClassRef>
  </saml:AuthnContext>
  </saml:AuthnStatement>
  </saml:Assertion>

  在最后一个列表中,你可以看到,SAML断言包含了很多安全语句,这些语句都和一个主题有关。一个断言的价值可以体现在各个方面,范围从基本要素(例如就某个主题做出断言的人)延伸到更为细致的话题(例如一个断言的时间有效的和日期,甚至还包括令断言更为严格的附加条件)。

  SAML当局a(提供断言方)和SAML依赖方(要求断言)之间交换断言。依照交换的性质,第三方或者“被断言方”也会参与进来。第三方满足单一登录方案,在该方案中“被断言方”是一个企图访问资源的终端用户,主管SAML当局和SAML依赖方交换。对于其它SAML交换来说,“被断言方”不过是组成SAML依赖方的应用逻辑。

  要想将SAML融入到SOA安全方案,主要取决于其平台中立性。例如早期SAML断言<NameSubject>中的<NameID>要素。在这个实例中,断言是通过电子邮箱做出的,但是这只是其中的一种情况。SAML同样也支持像X.509或者Kerberos这样的身份,这在企业设置中是很常见的,因此这些身份可以在一个特定的平台中屏蔽应用程序。

  把这个相同的情况看做是单一注册方法;而不是将程序a“和用户a”锁定到电子邮件地址,基于SAML的架构准许“被断言方”提供凭证,例如数字签名证书(X.509)或者Kerberos,准许安全策略建立在更为广阔的或者已经存在的安全基础设施中。

  实际上最主要的安全性问题“这一方真是其所宣称的那样吗?”,是通过SAML来回答的,而不是通过某一个特定平台来回答的,这些平台总有特有的方法断言(例如超时值设定的,失败的条件)。SAML会将这个断言过程标准化。

  我们再看一下含有SOAP服务的案例场景,列表1-2展示了一个嵌入在SOAP请求中的SAML代码片段。

  <?xml version="1.0" encoding="UTF-8"?>
  <env:Envelope
  xmlns:env=a  http://www.w3.org/2003/05/soap/envelope/a  >
  <env:Body>
  <samlp:AttributeQuery
  xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
  xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
  ID="aaf23196-1773-2113-474a-fe114412ab72"
  Version="2.0"
  IssueInstant="2008-10-15T20:31:40Z">
  <saml:Issuer>http://example.sp.com</saml:Issuer>
  <saml:Subject>
  <saml:NameID
  Format="urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName">
  C=US, O=TECHTARGET-TEST, OU=User, CN=jsmith@acme.org
  </saml:NameID>
  </saml:Subject>
  <saml:Attribute
  NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
  Name="urn:oid:2.5.4.42"
  FriendlyName="givenName">
  </saml:Attribute>
  </samlp:AttributeQuery>
  </env:Body>
  </env:Envelope>

  注意<NameID>值现在指向了X.509值。此外在客户服务器SOAP交换过程中还要执行安全性检查,但是因为断言是建立在SAML基础之上的,这需要松耦合和切换邮箱地址或者kerberos的功能(如果需要的话),这也是SOA最主要的目标。

  那么在哪里SAML会融入到Open-ID,自由联盟和Web服务中呢?在每个应用程序栈a“markup a”底部,都会有SAML运行。因此你不可能在这样的项目中看到有明确提到这方面的内容,这些项目都是整体的办法解决安全性问题。但是SAML的颗粒度使其功能变得更为强大,可以处理各种各样涉及云计算的安全隐患。

  目前有许多开放源SAML实施,进一步扩展了SAML的用途,远远超出了之前我们所说的那个项目。所以如果你的SOA项目也需要具有松耦合特性的安全检查,考虑一下SAML吧,它和XML一样,可以解决分布式系统安全问题。

0
相关文章