`
peterwanghao
  • 浏览: 128338 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

联邦身份认证——SAML

 
阅读更多

1、概述

目前越来越多的系统通过Web服务、门户和集成化应用程序彼此链接,为解决信息孤岛的问题单点登录的需求越来越紧迫。当前比较普遍的方式是采取集中式身份管理,这样做的好处是简化用户管理,把对访问控制的管理从本地的多个应用系统转移到管理中心,用户数据可以通过Web服务非常方便的访问。

这样做存在一个问题就是各系统失去了对用户数据的所有权,特别是在企业间应用的单点访问。而且,随着互联网规模的不断增长,把一个用户的所有信息全部收集到一个地方,即不可能也不需要。SAML规范的建立就是为了解决这一问题,它通过联合识别、验证和授权的形式允许企业建立自己所有和控制的数据,并能够以结构化的、受控的方式与协作企业共享这些数据。

2、基本概念

安全性断言标记语言(Security Assertion Markup LanguageSAML)是由结构化信息标准促进组织(OASIS)建立的一套安全标准。是基于XML(可扩展标记语言)面向Web服务的架构,用于在网络间交换安全信息。目前,SAML已经有3个版本,分别是200211月份的1.0版本、20039月份的1.1版本和20053月份的2.0版本。

SAML目标是让多个应用间实现联邦身份(IdentityFederation),提起联邦,大家可以想象一下欧盟,欧盟国家之间的公民都具有一个联邦身份,比如Peter是法国公民,John是比利时公民,这两个公民的身份都能够互相被共享。

在联邦环境中,通常包括三个角色:

u 主题(Subject)— 与身份信息相关的用户。

u 信任方(ServiceProvider)— 提供服务的一方,利用身份信息决定允许访问什么。

u 断言方(IdentityProvider)— 用于提供对主题的身份信息的正确的断言,类似一个公证机构。

在联邦环境下,任何需要授权访问的服务都需要知道服务请求方的身份主题信息(Subject),服务提供方(ServiceProvider)不负责审核用户的身份信息,但它依赖于1个甚至多个IdentityProvider提供的断言来完成此任务。当然,前提条件是建立信任关系( ServiceProvider要信任IdnetityProvider)。

什么是断言呢?断言可以看作是我们信赖的权威机构对用户作出的一种判断,而且我们相信这种判断。断言提供主体所执行的验证、主体属性、是否允许主体访问特定资源的授权决策等信息。一组断言组成一个主体的配置文件。配置文件中的断言可能来自不同的组织。

断言有三种类型:

* 验证断言:验证断言处理主体在特定时刻、特定机制下的身份验证。

* 属性断言:属性断言提供联系特定属性与给定主体的一种机制。

* 授权决策断言:授权决策断言管理给定主体访问资源的权限。

总体说来,SAML是两台服务器需要共享认证信息时使用的协议规范。需要强调的是SAML不负责验证,只负责传输被验证的信息。

3SAML断言

SAML断言的基本格式相同,主要要素如下([必需]表明所有实例中都必须有,[可选]表明该要素为可选)。

(1) Version[必需]

断言的版本号。目前,SAML已经有3个版本,分别是200211月份的1.0版本、20039月份的1.1版本和20053月份的2.0版本。

(2) ID[必需]

一个断言的ID号。实体在选择ID号时,必须考虑到实体本身或其他实体也有可能选择相同的ID号,这样的相同不应该带来很大的麻烦。如果一个数据对象拥有了一个ID号,那么它应该有且只有唯一的ID号。

(3) IssueInstant [必需]

主体颁发该断言时的时间。在SAML规范中只有一种时间格式,即UTC时间。

(4) <Issuer> [必需]

断言的颁发者。

(5) <ds:Signature>[可选]

使用XML签名对断言进行的签名,这样可以保护断言的完整性,同时可以验证断言的颁发者。

(6) <Subject>[可选]

断言的颁发对象。

(7) <Conditions>[可选]

断言有效的一些条件限制。验证断言有效性时,必须验证所有的条件(详细的条件描述和验证细节请参考SAML标准文档)。

(8) <Advice>[可选]

忠告:是对断言很温和的条件限制,在验证时可以被忽略,或者在验证过程中验证者即使不理解也不影响断言的有效性。但是严格的条件限制下必须均验证有效,才能够保证断言的有效性。

(9) <Statement>

这是为了扩展SAML断言类型而设置的,用户可以通过声明来添加自己的断言类型。

(10) <AuthnStatement>

身份验证声明。

(11) <AuthzDecisionStatement>

授权决策声明。

(12) <AttributeStatement>

属性声明。

身份验证断言是由某一个权威颁发的,断言某一主体在某一特定时间已经通过了身份验证。因此在身份验证断言中,主体元素<subject>和身份验证声明元素<AuthnStatement>是两个主要元素。

属性断言是由某一个权威颁发的关于某主体拥有某些属性的声明,在一个属性断言中可以拥有一个或者多个属性的声明,因此属性断言中的主体元素<subject>和属性声明元素<AttributeStatement>是两个主要元素。

授权决策断言表明断言中主体请求操作某种资源的结果,在该断言中使用URI来描述相应的资源。在授权决策断言中的主体元素<subject>和授权决策声明元素<AuthzDecisionStatement>是两个主要元素。

4SAML协议

SAML协议包括多种类型,它使用简单的请求/应答方式。SAML协议的基本类型如下:

(1) 断言查询和请求协议

断言查询和请求协议用来查询已有断言的有效性,或者通过主体或声明类型请求有关的断言。

(2) 身份验证(Authentication)请求协议

一个参与者(Participant)可能是一个代理、程序或者其他实体,需要得到一个关于身份验证的声明时,它可以使用身份验证请求协议向身份验证权威发送身份验证请求,在响应中包括了一个或者多个身份验证的声明。在SAML中,支持身份验证请求协议的权威也成为身份提供者(Identity Provider),本协议在SSO中应用非常广泛。

(3) 假影解析(Artifact Resolution)协议

假影解析协议提供了一种使用SAML绑定传输SAML消息的机制,在传输过程中只需使用请求和响应引用,而不需要使用其实际值。SAML请求和响应消息都可以通过引用得到。消息的发送者在发送消息的时候并不需要将所有的请求消息都转换为SAML绑定协议所要求的数据,而只需要发送一小段数据,称为“ 假影”;接收者能够根据假影使用其他绑定协议进行解析,得到原始的消息内容。

(4) 名字标识符管理协议

一个身份提供者为一个参与者提供一个名字标识符后可能需要修改这个名字标识符的值或结构,或者不再使用参与者的名字标识符。这时,需要使用名字标识符管理协议通知相关的服务提供者。

服务提供者在需要使用名字标识符时,也可以使用名字标识符管理协议来注册或者更改自己的名字标识符。

(5) 单点注销协议

单点注销协议提供了一种在一个地方注销会话,同时终止多个会话的机制。

(6) 名字标识符映射协议

当一个实体和一个身份提供者共享一个参与者的标识符时,该实体可以通过这个共享的标识符向身份提供者请求参与者的名字标识符。

5SAML应用模式

根据 Service Provider( 以下简称 SP) Identity Provider( 以下简称 IDP) 的交互方式, SAML 可以分为以下两种模式:一种是 SP 拉方式,一种是 IDP 推方式。

SAML 中,最重要的环节是 SP 如何获取对 Subject 的断言, SP 拉方式是 SP 主动到 IDP 去了解 Subject 的身份断言,而 IDP 推方式则是 IDP 主动把 Subject 的身份断言通过某种途径告诉 SP

1SAML POST/Artifact Bindings 方式(即 SP 拉方式)

该方式的主要特点是, SP 获得客户端的凭证 ( IDP Subject 的一种身份认可 ) 之后,主动请求 IDP Subject 的凭证的断言。如下图所示: Subject 是根据凭证去访问 SP 的。凭证代表了 Subject 的身份。

现在,让我们看看 SP 拉方式是如何进行的:

Subject 访问 SP 的受保护资源, SP 发现 Subject 的请求中没有包含任何的授权信息,于是它重定向用户访问 IDP.

SAML 的 POST/Artifact Bindings 方式

协议执行:

1Subject IDP 请求凭证 ( 方式是提交用户名 / 密码 )

2IDP 通过验证 Subject 提供的信息,来确定是否提供凭证给 Subject

3,假如 Subject 的验证信息正确,他将获取 IDP 的凭证以及将服务请求同时提交给 SP

4SP 接受到 Subject 的凭证,它是提供服务之前必须验证次凭证,于是,它产生了一个 SAML 请求,要求 IDP 对凭证断言

5,凭证是 IDP 产生的,它当然知道凭证的内容,于是它回应一个 SAML 断言给 SP

6SP 信任 IDP SAML 断言,它会根据断言结果确定是否为 Subject 提供服务。

2SAML Redirect/POST Bindings 方式 ( IDP 推方式 )

  该方式的主要特点是, IDP 交给 Subject 的不是凭证,而是断言。

过程如下图所示:

SAML 的 Redirect/POST Bindings 方式

1, Subject 访问 SP 的授权服务, SP 重定向 Subject IDP 获取断言。

2, IDP 会要求 Subject 提供能够证明它自己身份的手段 (Password X.509 证书等 )

3, Subject IDP 提供了自己的帐号密码。

4, IDP 验证密码之后,会重订向 Subject 到原来的 SP

5, SP 校验 IDP 的断言 ( 注意, IDP 会对自己的断言签名, SP 信任 IDP 的证书,因此,通过校验签名,能够确信从 Subject 过来的断言确实来自 IDP 的断言 )

6, 如果签名正确, SP 将向 Subject 提供该服务。

6SAML安全

SAML 定义了一个 XML 签名(XML Signature)元素以标识认证中心。该元素可以包含一个带有公钥、到期日和使用策略的 X509 证书。XML 签名还包含签名值本身,签名值是由认证中心为元素内容生成的。可以使用 X509 证书中权威机构的公钥信息来验证签名。这样能够保证信息的安全性、有效性和完整性。

重放攻击可用于造成数据完整性问题以及拒绝服务攻击。SAML 提供了避免重放攻击的保护。SAML 要求在传输断言和消息时使用 SSL 加密,以专门防止断言被拦截。此外,SAML 提供了数字签名机制,该机制使断言具有有效时间范围,以防止断言以后被重播。

使用IP地址避免DNS欺骗。

使用安全超文本传输协议(HTTPS)和SSL/TLS,消除HTTP链接攻击。

7SAML扩展

SAML的设计特别关注了灵活性。遇到标准尚未涵盖的需求时可扩展。SAML支持很多方式的扩展,包括断言和协议。

u 可修改断言Schema和协议Schema进行扩展;

u 通过使用带有专有命名空间的元素和属性作为可插入的扩展点来进行扩展;

u 通过定义一些基于URI的标识进行扩展。

参考资料

u SAML标准&协议

http://www.searchsoa.com.cn/showContent_1601.htm

u Web服务安全

http://book.51cto.com/art/200712/62793.htm

u 揭开SAML的神秘面纱

http://industry.ccidnet.com/art/3089/20060213/427115_1.html

分享到:
评论

相关推荐

    基于python的统一身份认证授权管理解决方案,支持多种标准协议(LDAP, OAuth2, SAML, OpenID)

    基于Python的统一身份认证授权管理系统提供了一种高效、安全的解决方案,它能够支持多种业界标准协议,如LDAP(轻量目录访问协议)、OAuth2、SAML(Security Assertion Markup Language)以及OpenID。这些协议在不同...

    SAML.rar_Java 8_saml_saml webservice_saml2.0_saml协议

    4、SAML:集中身份管理的秘诀 5、SAML:企业级的IdP 6、SAML:IdP和SP用户存储库 7、XML安全:使用SAML确保可移植的信任 8、揭开SAML的神秘面纱 9、安全地共享数字身份信息(一) 10、安全地共享数字身份信息(二) 11、...

    SAML的标准与协议

    在SAML出现之前,若要在诸如Websphere、Weblogic和SunONE等不同的身份验证平台之间实现SSO,每个平台都需要开发特定的适配器来相互沟通。SAML的出现解决了这个问题,通过标准化的协议,使得各产品可以基于SAML共享...

    Security Assertion Markup Language (SAML) 2&#46;0 Technical Overview

    SAML 2.0的规范旨在为单点登录(Single Sign-On, SSO)、身份管理(Identity Management, IdM)以及联邦身份验证(Federation)等场景提供一个统一且强大的解决方案。 二、SAML 2.0使用案例 1. **单点登录(SSO)...

    SAML2.0核心协议规范saml-core-2.0-os

    7. 跨域和联邦:SAML 2.0特别注重支持跨域身份管理,允许不同域之间共享身份信息,实现身份联邦。 8. 扩展性:SAML 2.0允许通过定义新的断言和协议消息类型、属性以及其他扩展点来支持定制化需求。 在实际应用中,...

    saml协议所需jar包

    SAML(Security Assertion Markup Language)协议是一种用于身份验证和授权的标准,它允许Web应用程序在不同的安全域之间交换用户身份信息。在Java环境中,SAML的实现通常依赖于一系列的库,这些库打包成JAR文件供...

    SAML文档详细介绍.pdf

    SAML最初由OASIS(Organization for the Advancement of Structured Information Standards)于2001年发布,至今已经发展至SAML 2.0版本,成为广泛接受的联邦身份管理标准。 #### 二、SAML的工作原理与组件 SAML的...

    SAML v2.0 开发指南 SSO必备

    SAML提供了一种机制,允许用户通过使用现有的身份验证凭证从一个地方安全地访问多个应用程序。这种方式可以改善用户体验并降低企业的身份管理成本。本书《SAML v2.0 开发指南 SSO必备》是一个针对开发者的指南,它...

    saml-metadata-2.0-os

    1. **身份提供者(Identity Provider, IdP)**:负责提供用户的身份信息,通常通过认证用户来验证其身份。 2. **服务提供者(Service Provider, SP)**:依赖于身份提供者的认证结果来提供服务或资源。 3. **联盟...

    SAML2.0协议翻译.doc

    2. **服务提供商发起的SSO**(SP-initiated SSO):用户尝试访问SP服务时,如果未认证,SP会重定向用户到IdP进行身份验证,验证完成后返回SAML断言。 3. **响应/请求模式**(Response/Request Mode):SP可以主动向...

    Learning SAML

    《学习SAML:身份验证与单点登录的基石》 SAML(Security Assertion Markup Language,安全断言标记语言)是一种开放标准,用于在不同的信任域之间交换身份验证和授权数据。它在现代Web应用程序和企业级系统中扮演...

    python-saml-master

    Python SAML库是用于在Python应用程序中实现Security Assertion Markup Language(SAML)身份验证的工具。SAML是一种标准,允许身份提供者(Identity Provider, IdP)和服务提供者(Service Provider, SP)之间交换...

    SAML2完整规范

    **SAML2.0全称Security Assertion Markup Language 2.0,是一种基于XML的协议,用于在不同的安全域之间交换身份验证和授权数据。它在单点登录(Single Sign-On, SSO)场景中扮演了核心角色,允许用户通过一次登录...

    saml-client_java_saml_client_

    1. **身份验证请求(AuthnRequest)**: 用户尝试访问服务提供者(SP)的受保护资源,SP向身份提供者(IdP)发送一个SAML认证请求。 2. **身份验证响应(AuthnResponse)**: IdP验证用户身份后,返回一个包含认证结果...

    统一身份认证平台建设技术方案 (1).doc

    * 身份认证协议:使用基于标准的身份认证协议,如OAuth、SAML等。 * 身份验证机制:使用多因素身份验证机制,包括密码、指纹、脸部识别等。 * 授权机制:使用基于角色的访问控制(RBAC)机制,确保用户的权限控制。 ...

    saml2.0规范完全文档

    4. **SAML-Authn-Context-2.0-os.pdf**:SAML认证上下文定义了多种认证方法,比如密码、智能卡、多因素认证等。这有助于确定一个主体(用户)是如何被验证的,增强了身份验证过程的透明度和可审计性。 5. **SAML-...

    saml第三方资料.rar

    SAML(Security Assertion Markup Language)是一种开放标准,用于在不同的安全域之间交换身份验证和授权数据。这个标准被广泛应用于单点登录(Single Sign-On, SSO)场景,允许用户在一个系统上登录后,无须再次...

    SAML2.0 基础理论

    SAML(Security Assertion Markup Language)2.0是一种开放标准,由标识化组织OASIS提出,旨在解决数字身份验证和单点登录(Single Sign-On, SSO)的问题。SAML2.0旨在提高Web服务的安全性和互操作性,让用户能够在...

    django-saml2-auth:简化Django SAML2身份验证。 轻松与Okta等SAML2 SSO身份提供商集成

    标题和描述提到了"django-saml2-auth",这是一个针对Django框架的库,用于实现SAML2(Security Assertion Markup Language 2.0)身份验证。SAML2是一种标准协议,允许身份提供者(Identity Provider, IdP)如Okta,...

Global site tag (gtag.js) - Google Analytics