`

SAML介绍

 
阅读更多

       工作了一段时间,接触到不少知识,好久没有进行总结了,总结总结哈。

       其中在系统中用到单点登录的需求,此单点登录有些特殊需求,多个系统之间不存在公共的用户信息,而是自己维护自己的用户集,通过认证中心认证ticket的方式实现系统之间的无缝认证。经过查资料,接触到saml(安全断言标记语言)可以实现此需求,做了一个saml与spring security结合使用的demo,下面先对saml进行简单介绍和回顾。

一、背景知识:

      SAML即安全断言标记语言,英文全称是Security Assertion Markup Language。它是一个基于XML的标准,用于在不同的安全域(security domain)之间交换认证和授权数据。在SAML标准定义了身份提供者(identity provider)和服务提供者(service provider),这两者构成了前面所说的不同的安全域。 SAML是OASIS组织安全服务技术委员会(Security Services Technical Committee)的产品。

    SAML(Security Assertion Markup Language)是一个XML框架,也就是一组协议,可以用来传输安全声明。比如,两台远程机器之间要通讯,为了保证安全,我们可以采用加密等措施,也可以采用SAML来传输,传输的数据以XML形式,符合SAML规范,这样我们就可以不要求两台机器采用什么样的系统,只要求能理解SAML规范即可,显然比传统的方式更好。SAML 规范是一组Schema 定义。

可以这么说,在Web Service 领域,schema就是规范,在Java领域,API就是规范。

  SAML 作用

SAML 主要包括三个方面:

1.认证申明。表明用户是否已经认证,通常用于单点登录。

2.属性申明。表明 某个Subject 的属性。

3.授权申明。表明 某个资源的权限。

  SAML框架

SAML就是客户向服务器发送SAML 请求,然后服务器返回SAML响应。数据的传输以符合SAML规范的XML格式表示。

SAML 可以建立在SOAP上传输,也可以建立在其他协议上传输。

因为SAML的规范由几个部分构成:SAML Assertion,SAML Prototol,SAML binding等

  安全
由于SAML在两个拥有共享用户的站点间建立了信任关系,所以安全性是需考虑的一个非常重要的因素。SAML中的安全弱点可能危及用户在目标站点的个人信息。SAML依靠一批制定完善的安全标准,包括SSL和X.509,来保护SAML源站点和目标站点之间通信的安全。源站点和目标站点之间的所有通信都经过了加密。为确保参与SAML交互的双方站点都能验证对方的身份,还使用了证书。

二、基于 SAML的SSO

下面简单介绍使用基于SAML的SSO登录到WebApp1的过程(下图源自SAML 的 Google Apps SSO,笔者偷懒,简单做了修改)

此图片说明了以下步骤。

  1. 用户尝试访问WebApp1。
  2. WebApp1 生成一个 SAML 身份验证请求。SAML 请求将进行编码并嵌入到SSO 服务的网址中。包含用户尝试访问的 WebApp1 应用程序的编码网址的 RelayState 参数也会嵌入到 SSO 网址中。该 RelayState 参数作为不透明标识符,将直接传回该标识符而不进行任何修改或检查。
  3. WebApp1将重定向发送到用户的浏览器。重定向网址包含应向SSO 服务提交的编码 SAML 身份验证请求。
  4. SSO(统一认证中心或叫Identity Provider)解码 SAML 请求,并提取 WebApp1的 ACS(声明客户服务)网址以及用户的目标网址(RelayState 参数)。然后,统一认证中心对用户进行身份验证。统一认证中心可能会要求提供有效登录凭据或检查有效会话 Cookie 以验证用户身份。
  5. 统一认证中心生成一个 SAML 响应,其中包含经过验证的用户的用户名。按照 SAML 2.0 规范,此响应将使用统一认证中心的 DSA/RSA 公钥和私钥进行数字签名。
  6. 统一认证中心对 SAML 响应和 RelayState 参数进行编码,并将该信息返回到用户的浏览器。统一认证中心提供了一种机制,以便浏览器可以将该信息转发到 WebApp1 ACS。
  7. WebApp1使用统一认证中心的公钥验证 SAML 响应。如果成功验证该响应,ACS 则会将用户重定向到目标网址。
  8. 用户将重定向到目标网址并登录到 WebApp1。

基于SAML的SSO的好处

  1. 出现大大简化了SSO,提升了安全性
  2. 跨域不再是问题,不需要域名也可访问
  3. 不仅方便的实现Webform、Winform的单点登录,而且可以方便的实现java与.net应用的单点登录
分享到:
评论
3 楼 longge424 2014-08-27  
你好,可否将saml与spring security结合使用的demo分享一下,谢谢!
2 楼 redhacker 2013-07-01  
写的还不错!谢谢!
1 楼 linluxian 2013-03-26  
 

相关推荐

    SAML文档详细介绍.pdf

    ### SAML:安全断言标记语言详解 #### 一、SAML概述 SAML,全称为Security Assertion Markup Language,即安全断言标记语言,是一种基于XML的开放标准,旨在简化跨域的身份验证和授权流程。SAML最初由OASIS...

    SAML2完整规范

    - `saml-v2_0-intro-dec05.ppt`:可能是SAML2.0的介绍性演示文稿,可能包含基础知识和概念解释。 - `saml2.spp`:可能是SAML2.0的示例文件或软件程序,用于演示或实现SAML2.0协议。 **在实际应用中,企业通常会结合...

    SAML v2.0 开发指南 SSO必备

    《SAML v2.0 开发指南 SSO必备》不仅介绍SAML的基本概念和SSO技术,还详细描述了在.NET环境下如何实现基于SAML的单点登录系统。书中所包含的大量代码示例、接口说明、配置示例和安全考量,为开发者提供了一个全面...

    saml-profiles-2.0-os

    本篇文章将详细介绍《SAML Profiles for the OASIS Security Assertion Markup Language (SAML) V2.0》中的关键知识点。 #### 二、文档基本信息 - **标题**:“saml-profiles-2.0-os” - **描述**:“SAML profile...

    saml第三方资料.rar

    9. **SAML标准与协议系列**:这些文档可能详细介绍了SAML标准的发展、核心概念和实施细节,帮助开发者深入理解SAML的工作流程和应用场景。 总的来说,这个压缩包提供了丰富的SAML学习资源,涵盖了从基础概念到高级...

    SAML2.0简要介绍

    SAML(Security Assertion Markup Language) 安全断言标记语言 标识化组织OASIS提出的用于安全互操作的标准 版本:1.0,1.1,2.0 主要内容 SAML断言:定义交互的数据格式 SAML协议:定义交互的消息格式 SAML绑定...

    SAML 协议译本

    - **SAML Binding**:详细介绍了 SAML 断言如何通过不同的网络协议传输。 - **SAML Profiles**:描述了 SAML 在特定场景中的使用模式。 对于初学者而言,推荐首先阅读 SAML 主题的简介,再深入到 OASIS 的 #...

    sstc-saml-tech-overview-2.0

    《SAML V2.0 Technical Overview》(委员会草案02版)是一份由OASIS(组织为开放标准)安全服务技术委员会(Security Services TC)发布的文档,该文档详细介绍了SAML 2.0的技术框架与应用范围。SAML 2.0(Security ...

    基于SAML的单点登录系统的研究与实现

    6. 部署与维护:介绍部署SAML单点登录系统的步骤,包括环境配置、组件安装和参数配置等。同时,也需要考虑系统的日常维护和升级策略。 基于SAML的单点登录系统研究成果和实现,对于希望提升安全性和便捷性的企业...

    单点登录saml

    详细内容后面会介绍。 接下来第二个概念就是“安全”了。 你能提供一个断言, 别人能不能假冒你提供一个断言从而骗取服务端的信任呢? 另外服务端为什么会信任你给的断言呢? 这就涉及到安全的问题了。为了防止...

    Net SAML2 Service Provider Framework

    《Net SAML2 Service Provider Framework》是一份详尽的文档,旨在介绍和解释.NET环境下的SAML2服务提供者框架的各个方面。该框架是为实现安全、标准化的身份验证与授权机制而设计的,特别适用于跨组织或跨域的用户...

    saml-idp:节点的简单SAML身份提供程序(IdP)

    介绍此应用程序提供了一个简单的SAML身份提供程序(IdP),以使用或单一注销配置文件测试SAML 2.0服务提供程序(SP)。 该样本不适用于生产系统!安装全局命令行工具npm install --global saml-idp手动的从此回购的...

    SAML2 API-开源

    3. `README.txt`:这是项目的基本介绍和使用说明,通常会包含快速入门指南、依赖信息、许可协议等关键内容。 4. `saml2api-demo-1.1.2.war`:这是一个Web应用程序的归档文件,可能包含了一个演示如何使用SAML2 API的...

    saml-sp:用于SAML 2.0 Web SSO的简单服务提供程序(SP)和用于WS联盟的依赖方(RP)

    介绍此应用为或依赖方(RP)提供了一个简单的测试服务提供商(SP) 支持以下SAML 2.0 WebSSO功能: 认证请求签名(SHA1或SHA256) HTTP-POST或HTTP-重定向绑定身份验证上下文类NameID格式强制验证动态...

    samlsigtest:演示SAML响应解码和XML签名验证的简单项目

    8. **项目结构**:一个典型的Java项目结构可能包括src/main/java(源代码)、src/test/java(测试代码)、pom.xml(Maven项目配置文件)以及README.md(项目介绍和指南)等。 9. **Git仓库**:Git是一种分布式版本...

    OpenSAML 2.0 Developers Manual.rar

    1. **SAML基础**:介绍SAML的基本概念,包括断言、主体、属性、身份提供者和服务提供者的角色以及SAML的交互流程。 2. **OpenSAML架构**:详细解析OpenSAML库的结构,包括核心类、XML绑定和解析器,以及如何利用...

    SAML-XXE-Test:专为SAML接口生成的简单XXE测试套件

    介绍 是一种基于XML的标记语言,SAML端点使用的XML解析器可能容易受到。 SAML消息通常使用Base64Url()编码进行传输,并且可能会另外放气(取决于所使用的SAML绑定)。 这使得测试XXE漏洞更加困难,因为在评估SAML...

    spring-security-saml-gae:项目支持在 Google 应用程序引擎中部署 Spring SAML 应用程序

    Spring Security SAML GAE Project 支持在 Google 应用程序引擎中部署 Spring SAML 应用程序。 介绍 默认情况下,Google 应用程序引擎不支持启动新线程和直接使用套接字。 以下类介绍了 GAE 特定 API 的用法,用于...

    SAML-SSO:SAML SSO 测试 SingleSignOn 和 RelyingParty 项目

    在本教程中,我们将逐步介绍通过单点登录实现联合身份验证的步骤。 我们将创建一个 MVC ASP .NET 网站和一个通用身份验证网站身份提供程序(也称为安全令牌服务或 STS)。 身份提供者网站将提供登录表单,使用表单...

Global site tag (gtag.js) - Google Analytics