工作了一段时间,接触到不少知识,好久没有进行总结了,总结总结哈。
其中在系统中用到单点登录的需求,此单点登录有些特殊需求,多个系统之间不存在公共的用户信息,而是自己维护自己的用户集,通过认证中心认证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,笔者偷懒,简单做了修改)
此图片说明了以下步骤。
- 用户尝试访问WebApp1。
- WebApp1 生成一个 SAML 身份验证请求。SAML 请求将进行编码并嵌入到SSO 服务的网址中。包含用户尝试访问的 WebApp1 应用程序的编码网址的 RelayState 参数也会嵌入到 SSO 网址中。该 RelayState 参数作为不透明标识符,将直接传回该标识符而不进行任何修改或检查。
- WebApp1将重定向发送到用户的浏览器。重定向网址包含应向SSO 服务提交的编码 SAML 身份验证请求。
- SSO(统一认证中心或叫Identity Provider)解码 SAML 请求,并提取 WebApp1的 ACS(声明客户服务)网址以及用户的目标网址(RelayState 参数)。然后,统一认证中心对用户进行身份验证。统一认证中心可能会要求提供有效登录凭据或检查有效会话 Cookie 以验证用户身份。
- 统一认证中心生成一个 SAML 响应,其中包含经过验证的用户的用户名。按照 SAML 2.0 规范,此响应将使用统一认证中心的 DSA/RSA 公钥和私钥进行数字签名。
- 统一认证中心对 SAML 响应和 RelayState 参数进行编码,并将该信息返回到用户的浏览器。统一认证中心提供了一种机制,以便浏览器可以将该信息转发到 WebApp1 ACS。
- WebApp1使用统一认证中心的公钥验证 SAML 响应。如果成功验证该响应,ACS 则会将用户重定向到目标网址。
- 用户将重定向到目标网址并登录到 WebApp1。
基于SAML的SSO的好处
- 出现大大简化了SSO,提升了安全性
- 跨域不再是问题,不需要域名也可访问
- 不仅方便的实现Webform、Winform的单点登录,而且可以方便的实现java与.net应用的单点登录
相关推荐
### SAML:安全断言标记语言详解 #### 一、SAML概述 SAML,全称为Security Assertion Markup Language,即安全断言标记语言,是一种基于XML的开放标准,旨在简化跨域的身份验证和授权流程。SAML最初由OASIS...
- `saml-v2_0-intro-dec05.ppt`:可能是SAML2.0的介绍性演示文稿,可能包含基础知识和概念解释。 - `saml2.spp`:可能是SAML2.0的示例文件或软件程序,用于演示或实现SAML2.0协议。 **在实际应用中,企业通常会结合...
《SAML v2.0 开发指南 SSO必备》不仅介绍SAML的基本概念和SSO技术,还详细描述了在.NET环境下如何实现基于SAML的单点登录系统。书中所包含的大量代码示例、接口说明、配置示例和安全考量,为开发者提供了一个全面...
本篇文章将详细介绍《SAML Profiles for the OASIS Security Assertion Markup Language (SAML) V2.0》中的关键知识点。 #### 二、文档基本信息 - **标题**:“saml-profiles-2.0-os” - **描述**:“SAML profile...
9. **SAML标准与协议系列**:这些文档可能详细介绍了SAML标准的发展、核心概念和实施细节,帮助开发者深入理解SAML的工作流程和应用场景。 总的来说,这个压缩包提供了丰富的SAML学习资源,涵盖了从基础概念到高级...
SAML(Security Assertion Markup Language) 安全断言标记语言 标识化组织OASIS提出的用于安全互操作的标准 版本:1.0,1.1,2.0 主要内容 SAML断言:定义交互的数据格式 SAML协议:定义交互的消息格式 SAML绑定...
- **SAML Binding**:详细介绍了 SAML 断言如何通过不同的网络协议传输。 - **SAML Profiles**:描述了 SAML 在特定场景中的使用模式。 对于初学者而言,推荐首先阅读 SAML 主题的简介,再深入到 OASIS 的 #...
《SAML V2.0 Technical Overview》(委员会草案02版)是一份由OASIS(组织为开放标准)安全服务技术委员会(Security Services TC)发布的文档,该文档详细介绍了SAML 2.0的技术框架与应用范围。SAML 2.0(Security ...
6. 部署与维护:介绍部署SAML单点登录系统的步骤,包括环境配置、组件安装和参数配置等。同时,也需要考虑系统的日常维护和升级策略。 基于SAML的单点登录系统研究成果和实现,对于希望提升安全性和便捷性的企业...
详细内容后面会介绍。 接下来第二个概念就是“安全”了。 你能提供一个断言, 别人能不能假冒你提供一个断言从而骗取服务端的信任呢? 另外服务端为什么会信任你给的断言呢? 这就涉及到安全的问题了。为了防止...
《Net SAML2 Service Provider Framework》是一份详尽的文档,旨在介绍和解释.NET环境下的SAML2服务提供者框架的各个方面。该框架是为实现安全、标准化的身份验证与授权机制而设计的,特别适用于跨组织或跨域的用户...
介绍此应用程序提供了一个简单的SAML身份提供程序(IdP),以使用或单一注销配置文件测试SAML 2.0服务提供程序(SP)。 该样本不适用于生产系统!安装全局命令行工具npm install --global saml-idp手动的从此回购的...
3. `README.txt`:这是项目的基本介绍和使用说明,通常会包含快速入门指南、依赖信息、许可协议等关键内容。 4. `saml2api-demo-1.1.2.war`:这是一个Web应用程序的归档文件,可能包含了一个演示如何使用SAML2 API的...
介绍此应用为或依赖方(RP)提供了一个简单的测试服务提供商(SP) 支持以下SAML 2.0 WebSSO功能: 认证请求签名(SHA1或SHA256) HTTP-POST或HTTP-重定向绑定身份验证上下文类NameID格式强制验证动态...
8. **项目结构**:一个典型的Java项目结构可能包括src/main/java(源代码)、src/test/java(测试代码)、pom.xml(Maven项目配置文件)以及README.md(项目介绍和指南)等。 9. **Git仓库**:Git是一种分布式版本...
1. **SAML基础**:介绍SAML的基本概念,包括断言、主体、属性、身份提供者和服务提供者的角色以及SAML的交互流程。 2. **OpenSAML架构**:详细解析OpenSAML库的结构,包括核心类、XML绑定和解析器,以及如何利用...
介绍 是一种基于XML的标记语言,SAML端点使用的XML解析器可能容易受到。 SAML消息通常使用Base64Url()编码进行传输,并且可能会另外放气(取决于所使用的SAML绑定)。 这使得测试XXE漏洞更加困难,因为在评估SAML...
Spring Security SAML GAE Project 支持在 Google 应用程序引擎中部署 Spring SAML 应用程序。 介绍 默认情况下,Google 应用程序引擎不支持启动新线程和直接使用套接字。 以下类介绍了 GAE 特定 API 的用法,用于...
在本教程中,我们将逐步介绍通过单点登录实现联合身份验证的步骤。 我们将创建一个 MVC ASP .NET 网站和一个通用身份验证网站身份提供程序(也称为安全令牌服务或 STS)。 身份提供者网站将提供登录表单,使用表单...