深入解析SAML:安全断言标记语言及其在单点登录中的应用

本文详细介绍了安全断言标记语言(SAML)的定义、工作原理、组件及其在单点登录(SSO)中的应用。SAML是一种基于XML的开放标准,用于在不同系统间安全地交换身份、认证和授权信息,实现跨域身份管理。

什么是SAML(安全断言标记语言)?

安全断言标记语言(SAML)是一种开放标准,用于在不同系统间共享关于身份、认证和授权的安全信息。SAML使用户无需为每个网站记住不同的密码,而是通过单点登录(SSO)服务使用一组登录凭据访问多个应用程序、服务或网站。身份和认证级别使用SAML协议在不同系统和服务之间请求、接收和格式化数据。

SAML基于可扩展标记语言(XML)标准共享数据。它提供了一个框架,支持SSO和其他联合身份系统。联合身份系统将单个身份链接到多个身份域,这种方法实现了涵盖企业、可信第三方供应商和客户网络资源的SSO。

结构化信息标准促进组织(OASIS)管理SAML协议。当前版本SAML 2.0于2005年作为OASIS标准发布。

SAML的用途

组织将SAML用于企业对企业(B2B)和企业对消费者(B2C)应用程序。它用于在一个或多个网络系统间共享用户凭据。SAML框架旨在实现两个目标:用户认证和用户授权。此外,SAML促进了不同系统间的互操作性,使不同的身份提供商和服务提供商能够有效通信,即使它们具有不同的技术规范。

SAML最常用于操作SSO认证系统,使最终用户登录其网络一次即可被授权访问该网络上的多个资源。例如,与Microsoft Active Directory(AD)一起使用的SSO可以与SAML 2.0认证请求集成。

认证是确定实体是否为其声称对象的过程。它在授权之前是必需的,授权是确定认证身份是否有权使用资源的过程。SAML认证依赖于验证用户凭据,这些凭据至少包括用户身份和密码。SAML还可以支持多因素认证。

SAML的工作原理

SSO应用程序使用SAML将关于用户身份的信息从身份提供商移动到服务提供商。SAML认证已登录主服务提供商的最终用户以访问另一个服务提供商的资源。

例如,已登录其主SSO工作网络的企业用户可以通过SAML认证到第三方云应用程序提供商,而无需单独登录云应用程序。主SSO系统充当身份提供商,云应用程序充当服务提供商。当已登录身份提供商的最终用户尝试打开云应用程序时,云应用程序识别最终用户,然后将用户(或其浏览器或其他客户端软件)指向身份提供商进行认证。

认证请求和对这些请求的响应必须符合SAML协议以交换信息,SAML授权数据格式化为断言。

以下是SAML过程的工作原理分解:

  1. 用户发起请求:用户尝试访问服务提供商的应用程序,例如具有身份或SSO提供商的Web应用程序或云应用程序。
  2. 用户被重定向到身份提供商:如果用户尚未认证,服务提供商将用户重定向到身份提供商进行认证。此重定向包括认证请求。
  3. 用户被认证:身份提供商提示用户登录。用户成功登录后,身份提供商生成SAML断言,这是一个安全令牌或数字签名的SAML响应,包含用户身份和属性信息。响应可能包括其他信息,指示用户是否被认证和授权访问受限资源。
  4. SAML断言传输:身份提供商通过用户的浏览器将SAML断言发送回服务提供商。此断言确认用户身份,并可能包括其他属性,如角色或权限。
  5. 访问被授予:服务提供商接收SAML断言,验证它,并根据断言中包含的信息授予用户对应用程序的访问权限。

SAML实体

SAML实体指参与基于SAML通信的任何系统组件,特别是在身份和服务提供的上下文中。SAML定义了三类实体:

  • 最终用户:需要认证才能访问应用程序的人。
  • 服务提供商:提供服务的任何系统,通常是用户寻求认证的服务,包括Web或企业应用程序。
  • 身份提供商:管理身份信息的特殊类型服务提供商。

SAML的主要目的是定义用于标准化认证数据编码的标记语言,以便在系统之间交换。它还包括所有相关的协议和绑定,这些协议和绑定使用符合SAML的消息在最终用户、服务提供商和身份提供商之间交换安全断言。

SAML的好处

SAML为用户和服务提供商提供了许多好处,尤其是在身份和访问管理方面优于其他标准。SAML的常见好处和用例包括:

  • 简化登录凭据:通过SAML的SSO方面,用户可以登录一次并访问多个应用程序,无需记住各种用户名和密码。SAML在后台无缝操作,使用户轻松享受简化登录体验的好处。
  • 提高安全性:SAML将存储和管理用户凭据的责任转移给专用身份提供商,消除了单个应用程序存储敏感密码数据的需要,降低了数据泄露的风险。通过集中认证,组织可以实施更强的安全措施,如多因素认证、强大密码策略和细粒度访问控制,以创建更安全和有弹性的环境。
  • 互操作性:SAML具有高度互操作性,因为它是一种不被任何单一供应商拥有的开放标准。该协议定义明确且文档详尽,确保在不同系统间一致集成。它还支持联合身份管理,使组织能够跨各种域和服务管理用户身份。这种互操作性简化了用户管理并改善了组织间的协作。
  • 减少密码重置和管理请求:SAML通过集中认证减少密码重置和管理请求。由于用户只需记住一组凭据,忘记密码的频率和密码重置的需求显著减少。此外,集中身份管理意味着密码更改在身份提供商级别处理,进一步简化流程并减少管理开销。
  • 节省成本和时间:SAML通过减少与管理多个账户和密码相关的管理任务来节省时间和成本。使用SSO,用户认证一次,导致更少的密码重置和帮助台支持请求。此外,集中身份管理简化了用户配置和访问控制,减少了IT工作量并节省了劳动力和维护成本。

SAML组件

SAML由几个关键组件组成,这些组件协同工作以促进不同实体之间安全交换身份、认证和授权信息。SAML的四种不同类型组件包括断言、协议、绑定和配置文件。

SAML断言

SAML断言是身份、认证和授权信息的语句。这些使用SAML中指定的基于XML的标签进行格式化。根据SAML核心协议规范,SAML断言是一个信息单元,提供由SAML机构做出的零个或多个语句。SAML机构是生成SAML认证断言的任何系统。SAML身份提供商是这些机构的例子。

SAML指定三种类型的断言:

  • 认证断言:此断言指示断言的主体已被认证。它包括认证时间和方法以及被认证的主体。
  • 属性断言:此断言将断言的主体与指定属性关联。指定的SAML属性是指与认证主体相关的定义信息片段。
  • 授权决策断言:此断言指示主体访问资源的请求是否已被批准或拒绝。

SAML协议

SAML协议定义不同实体如何请求和响应安全信息请求。与SAML断言类似,这些协议使用SAML中指定的XML标签进行编码。SAML为其自己的通用协议定义请求/响应交互 between systems and the entities that can be authenticated – either principals or subjects。SAML 2.0协议包括:

  • 认证请求协议:此协议定义认证断言请求和对此类请求的有效响应。当从用户发送到服务提供商的请求需要重定向到身份提供商时使用。
  • 单点注销协议:此协议定义一种技术,其中用户的所有活动会话可以几乎同时终止。此功能对于需要在使用户注销时终止与多个资源的会话的SSO执行非常重要。
  • 断言查询和请求协议:此协议定义新现有认证断言的请求。
  • 工件解析协议:此协议定义如何使用标识值或工件请求和传输SAML协议消息。此方法简化了特定协议消息的交换。
  • 名称标识符管理协议:此协议定义一种机制,供身份提供商通过更改名称标识符及其格式来管理其名称,或通知其他SAML实体名称标识符已终止。
  • 名称标识符映射协议:此协议定义一种机制,用于跨不同服务提供商映射用户标识符。

这些请求和响应协议定义为SAML的一部分,使系统能够请求认证、响应认证请求和交换SAML断言。这些协议独立于SAML消息绑定用于网络传输的网络协议。

SAML绑定

SAML绑定是为SAML协议消息指定的格式,以便嵌入并通过不同的传输机制传输。SAML依赖于其他几种协议,用于格式化和交换SAML请求和响应。这些包括:

  • XML:定义SAML消息的格式。
  • 超文本传输协议(HTTP):SAML用于交换消息。
  • SOAP:最初代表简单对象访问协议(尽管该含义已消失),封装SAML消息。

SAML绑定定义SAML协议消息如何传输。它们使用启用SAML实体之间通信的传输协议。SAML 2.0定义以下绑定:

  • HTTP重定向绑定:定义在HTTP重定向消息中交换SAML认证消息的格式。
  • HTTP POST绑定:定义在HTML表单中交换SAML认证消息的格式。
  • HTTP工件绑定:定义在HTML表单或添加到URL的字符串中交换SAML工件的格式。
  • SAML SOAP绑定:定义在SOAP消息中交换SAML认证消息的格式。
  • 反向SOAP(PAOS)绑定:定义Web浏览器客户端响应编码在SOAP消息中的SAML消息的机制——有时称为PAOS,即反向SOAP。
  • SAML URI绑定:定义使用统一资源标识符检索SAML断言的机制。

SAML绑定使认证系统能够使用广泛支持的协议交换SAML断言和请求。

SAML配置文件

SAML配置文件确定SAML断言、协议和绑定如何一起用于某些应用程序中的互操作性。SAML配置文件由SAML断言、协议和绑定组成。SAML配置文件用于定义特定应用程序。

为SAML 2.0定义的配置文件包括:

  • Web浏览器SSO配置文件:定义SAML如何用于在Web浏览器上启用SSO。
  • 增强客户端和代理配置文件:指定专用客户端或网关代理如何使用SOAP或PAOS绑定操作。
  • 身份提供商发现配置文件:定义一种技术,使服务提供商能够访问用户先前访问过的身份提供商。
  • 单点注销配置文件:显示单点注销协议如何与SAML绑定一起工作。
  • 断言查询/请求配置文件:指定SAML实体如何通过像SOAP这样的同步绑定接收SAML断言。
  • 工件解析配置文件:定义SAML工件如何通过特定协议交换。
  • 名称标识符管理配置文件:定义SAML名称标识符管理协议如何通过特定协议工作。
  • 名称标识符映射配置文件:定义SAML名称标识符映射协议如何通过特定协议工作。
  • 属性查询配置文件:概述服务提供商如何在初始认证过程后从身份提供商请求补充用户属性。

这些配置文件可以配置以启用SSO部署。

SAML与SSO的区别

SAML和SSO是认证和身份管理领域中的相关概念,但它们服务于不同的目的并具有 distinct characteristics。区分SAML和SSO的关键特征如下:

  • SAML是一个请求认证的平台。其最常见用途是启用SSO。使用SAML利用SSO服务的一些产品包括Microsoft Azure AD、Citrix Workspace、Entrust Identity和VMware vSphere。
  • SSO使用身份联合管理使多个域能够使用一组凭据认证用户。SSO可以使用SAML协议交换认证信息,或者可以使用其他协议,如OpenID,来管理跨域认证。
  • SAML提供执行SSO所需的技术框架和协议。它指定认证请求和响应应如何在身份提供商和服务提供商之间格式化和交换。
  • SSO是使用诸如SAML等协议的最终用户体验。当用户登录一次时,他们可以访问各种服务而无需重新输入其凭据。
  • SAML通常用于需要安全、跨域认证的企业环境中。它对于基于Web的应用程序和服务特别有效。
  • SSO通常使用各种协议执行,包括SAML、开放授权(OAuth)和OpenID Connect。
  • SAML基于XML并使用断言传输认证信息。
  • SSO可以使用不同的技术,如cookie、令牌和各种认证协议,包括SAML。

SAML vs. OAuth vs. OpenID

除了SAML,OAuth和OpenID是两个重要的规范,它们启用SSO。

OAuth

OAuth 2.0授权框架保护用户凭据,同时使用这些凭据获得对第三方应用程序的访问。作为一个框架,OAuth可以与SAML或OpenID Connect一起使用以启用SSO。

以下是SAML和OAuth之间的一些区别:

  • SAML启用用户凭据的认证,而OAuth启用可能通过其他机制认证的用户的授权。
  • SAML消息基于XML格式化,而OAuth使用JavaScript对象表示法(JSON)格式化其消息。
  • SAML使用会话cookie管理会话状态,如认证令牌,而OAuth使用API调用管理授权。
  • SAML通过数字签名和加密保护数据交换,而OAuth依赖于HTTPS加密和承载令牌进行安全。

OpenID

OpenID Connect于2014年发布,是一个相对较新的协议,构建在OAuth框架上,使用户能够使用单个现有账户登录多个网站。它专门为Web和移动应用程序设计。OpenID Connect使用OAuth 2.0协议定义身份。它使用行业标准JSON Web令牌并依赖于安全HTTPS通信,使其成为认证和授权的灵活且用户友好的选项。各种提供商,包括Meta、Google和Microsoft,使用它来启用使用提供商凭据访问第三方网站。

SAML的历史

随着世界在世纪之交开始在互联网上开展业务,对跨域认证和授权的需求增长。当时,Kerberos认证协议 established for use inside enterprise networks,但它在跨域认证方面不足。Microsoft发布了AD以及Windows 2000 Server edition,但这还不够。显然需要一个开放标准。

SAML 1.0于2002年发布,提供了一个基本的认证和授权框架。SAML 1.1于2003年发布,解决了一些限制,但仍然具有受限功能。2005年,SAML 2.0(仍然是其最新版本)引入,具有重大改进,包括对元数据的支持、增强的单点登录和更好的属性交换。从那时起,SAML 2.0作为认证标准被广泛采用。

以下是SAML的简要历史时间线:

  • 2001年:OASIS安全服务技术委员会的第一次会议。该委员会 tasked with creating an XML framework for authentication and authorization。
  • 2002年:SAML 1.0规范作为OASIS标准发布。
  • 2003年:SAML 1.1作为OASIS标准发布。
  • 2005年:SAML 2.0作为OASIS标准发布。

自2005年以来,SAML的历史 largely been one of adoption and support from SSO vendors。

用户认证对于保护敏感信息和系统免受未经授权的访问至关重要。发现六种关键认证类型以增强网络安全性。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计