揭开SAML的神秘面纱(转)

当今,越来越多的系统通过Web服务、门户和集成化应用程序彼此链接,对于保证欲共享的信息安全交换的标准的需求也随之日益显著起来。SAML(安全性断言标记语言,Security Assertion Markup Language)提供了一个健壮且可扩展的数据格式集,在各种环境下交换数据和身份识别信息。这里的一个关键概念是身份联邦,它可满足SAML的定义,也就是说可使用独立、受管理的多个信息来源中的信息,从而实现身份严整这样的安全服务。SAML连同单点登录(SSO)共同构成现代网络环境中的必备的条件。 

身份联邦
  
在大多数计算机连入网络之前,独立系统像身份验证和授权这类安全服务的实现完全是独立的。因此,执行身份验证所需的全部代码以及密钥、口令、供授权决策所用的用户信息以及授权策略本身均存放于使用这些信息的系统上。最初系统连接到网络上时,情况变化不大。每个系统都是一个孤岛,各系统都要求用户拥有一个账户才能访问该系统。

  这种方法有许多明显的缺点.举例来说,设置多个账户,每个账户有一个密码、组或其他属性,这对用户和管理员来说是非常不方便。如果一个用户的职责发生变更而修改其账户属性,或有人离开组织时删除其账户,管理员要浪费大量时间。如果出现更强大的认证方法,各系统还必须单独地去升级。 

单点登录
  
随着万维网的出现,多台机器作为一个Web站点的主机成为一种普遍现象。但仅仅因为用户要使用不同的机器处理不同的请求而强迫他们多次在网络上进行登录显然是令人无法接受的。同样,门户也不能要求使用者每访问不同的应用程序就重新登录。单点登录(SSO)最初被视为一种提高生产力的奢侈品,而现在已成为一种必需品,至少在用户希望使用的是单一、集成式系统的情况下是如此。

  另外,随着互联网规模的不断增长,把一个用户的所有信息全部收集到一个地方,既不可能也不需要。不同个人和组织在与不同的对象打交道时会使用不同类型的信息,如医生掌管病历卡、经纪人知道拥有什么股票、保险代理人拥有保险规则、会计师保存财政和税款记录等等。经常性地将此信息移动到一个地点,只能使保持数据的准确性和及时更新更加困难。同时,移动信息还会增加数据在传输中丢失和被窃的可能性。

  尽管如此,为进行身份验证和授权,还是必须在网络上保留许多类型的信息。那也正是身份联邦的目的。处于授权等目的,身份联邦将来自多个数据源的同一用户数据综合在一起。不同的组织可能希望使用不同的产品去管理其身份数据,那么自然就需要制订一个在网络上传送这些数据——从数据当前所在的地方,到现在正需要数据的地方——的标准。虽然许多产品提供Web单点登录,同样需要一种标准使这种跨不同产品的传送成为可能。这就是SAML关注的领域。 

SAML基本原理
  
SAML将所有与检索、传输和共享安全信息相关的功能标准化为以下形式:

  • 为用户提供XML安全信息格式和请求及传输信息的格式。
  • 定义这些消息与SOAP等协议协作的方式。
  • 为像Web SSO这样的常见用例定义精确的消息交换。
  • 支持众多种隐私保护机制,包括在不披露用户身份的情况下确定用户属性的功能。
  • 详述在Unix、Microsoft Windows、X509、LDAP、DCE和XCML这些广泛应用的技术所提供的格式中处理身份信息的方法。
  • 提供一种系统的元数据机制,使得所有参与其中的系统能就所支持的SAML选项进行通讯。

  此外,SAML的设计特别关注了灵活性。遇到标准尚未涵盖的需求时可扩展。 

SAML的角色、断言和语句
  一个联邦环境至少包括三个角色。

  • 信任方——利用身份信息;具代表性的信任方是Service Provider,由其决定允许何种请求。
  • 断言方——提供安全信息;SAML称之为“Identity Provider”。
  • 主题——与身份信息相关的用户。

  任何环境下都会有许多主题和数个Service Provider。也可能存在多个Identity Provider。

  基本上,Service Provider或信任方需要了解三件事情:

  • 身份信息。
  • 产生请求的一方请求的用户是主题。
  • 提供身份信息的Identity Provider是可信任的。

  在SAML中,断言携带信息。断言中包含头信息、主题名称和一个或多个语句。头信息包含Identity Provider的名称和像发行与有效期等其他信息。

两类最重要的语句为:

  • 身份验证语句——关于该主题是一个在特定时间和地点、使用特殊的方法进行过身份验证的报告。SAML提供了超过20种不同身份验证方法的详细定义。身份验证语句支持SSO, 其中Identity Provider代表Service Provider进行登录。
  • 属性语句——包含与主题有关的属性。一条属性语句中的典型属性是组和角色,除此之外还会携带财政数据或任何其它属性。

  一种断言可同时携带这两种类型的语句。也可以自行定义其他语句类型。实际上,XACML已经定义一个可传送策略的语句和一个通讯授权决策结果的语句。

  SAML的强项之一就是其灵活性。Identity Provider能对断言进行数字签名。而且它还可选择使用其它像SSL这样的方法,以确保信息的完整性。断言可以包含一个名为Subject Confirmatin的元素,Service Provider使用该元素来确定断言中的信息是否涉及提出当前请求的一方。再强调一下,SAML允许Service Provider采用多种手段实现此目的。 

绑定和配置文件
  SAML断言是从Identity Provider传送到Service Provider,但可以通过多种途径实现这一目的。。Service Provider能直接通过一个专用信道获取断言。第二种可行的选择是,请求主题能传送断言并将其提供给Service Provider。第三种选择是通过另一个节点传播断言。在Web服务环境中,SOAP的头文件可传送断言。

  SAML定义了一组XML格式的请求和应答消息,Service Provider可使用这些消息直接获取断言。请求会指定Service Provider需要的信息,例如“所有约翰·史密斯的属性”。响应返回一个或多个匹配请求的断言。为使不同的产品能够交互操作,还必须详细说明各种网络协议怎样传送请求和应答。

  SAML的SOAP绑定详细说明了怎样在SOAP消息体中传送信息。PAOS绑定是专为无法接受但可以发送网络请求的移动电话这样的设备设计的。它向后在HTTP上运行SOAP,在HTTP应答中传送消息。Browser POST 和 Artifact Profile都用于处理标准网络浏览器的操作。在POST Profile中,SAML请求在不可见的域中传送形式上为经由浏览器邮递。在Artifact Profile中,向Service Provider传递一个名为Artifact的任意位字符串,通过一条专用后备信道使用它来响应的断言。

  SAML还为支持联邦身份环境提供了其他许多有用的机制。一种协议允许Service Provider确定通过将来自几个可能的Identity Provider的特定用户请求指示到何处。另一个协议允许两个Identity Provider将他们各自拥有的同一用户账户关联在一起。例如,一个Identity Provider知道用户为John Smith,另一个Provider知道用户为 Jonathan K. Smith。(正常情况下,出于隐私方面原因,这种关联需要用户的许可。)

  也有可能使用隐私保护的、临时性的身份,避免暴露长期有效的主题身份。继续我们的示例,一个Identity Provider知道包含主题ABC123的断言表示John Smith,另一个Provider则将ABC123与Jonathan K. Smith关联在一起,但是两者都不知道对方所使用的账户名。以后将使用一个完全不同的主题防止第三方侦测使用模式。

  SAML提供一个轻量级的注销协议,通知所有Service Provider和Identity Provider一个用户已经签出。其主要目的是为了方便整理资源,而不仅仅是作为一种确保用户从系统中注销的机制。还有许多其他有用的SAML特性,其包含的功能如下:

  • 加密全部断言,也可选择仅对其敏感部分加密。
  • 指定一个断言的目标用户。

  SAML标准中还包含各种功能结合的详细一致性指标,和一个讨论安全和隐私考虑事项的文档,。

结束语
  
SAML提供了一组有用的机制,可在规模庞大的环境中实现联邦身份管理。它尽可能详细地指定了绝大部分实际情况,从而提供了出色的交互性。对于独特的需求和未来可能出现的需求而言,它还是可扩展的。

posted on 2008-04-10 18:19  Keep Walking  阅读(12977)  评论(0编辑  收藏  举报