SAML 2.0 概述
SAML(安全断言标记语言)是一种基于XML的开源标准数据格式,用于在当事方之间交换身份验证和授权数据,特别是在身份提供者(IdP)和服务提供者(SP)之间。
核心概念
SAML 2.0单点登录(SSO)的核心参与方包括:
身份提供者(IdP):负责用户身份验证的实体,在单点登录中是指统一身份认证平台。
服务提供者(SP):依赖IdP进行身份验证的服务方,即需要被认证的应用程序。
断言(Assertion):IdP认证用户后,向SP发送的包含认证结果的XML文档。
SAML 2.0的优势
SAML 2.0通过标准化协议实现了跨域单点登录,用户只需一次登录即可访问多个关联系统,大大提升了用户体验和安全性。
SAML 2.0 单点登录流程
标准的SAML 2.0单点登录流程涉及以下步骤:
1
用户访问SP资源
用户通过浏览器尝试访问服务提供者(SP)上的受保护资源。
2
SP生成SAML认证请求
SP检查用户是否已认证,如未认证,则生成SAML AuthnRequest并将其重定向到IdP。
<saml2p:AuthnRequest
xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol"
AssertionConsumerServiceURL="https://sp.example.com/acs"
Destination="https://idp.example.com/sso"
ID="_a4984546052a64544d9761fbb4c24021"
IssueInstant="2023-10-01T05:49:09.215Z">
<saml2:Issuer>Example_SP</saml2:Issuer>
</saml2p:AuthnRequest>
3
IdP认证用户
IdP接收SAML请求,验证SP的合法性,并要求用户进行身份验证(如用户名/密码、多因素认证等)。
4
IdP生成SAML响应
认证成功后,IdP生成包含用户信息的SAML断言,并通过浏览器将其发送回SP的断言消费者服务(ACS)URL。
5
SP验证断言并创建会话
SP验证SAML断言的签名和有效性,然后为用户创建本地会话并重定向到最初请求的资源。
协议绑定
SAML 2.0支持多种协议绑定方式,其中HTTP POST绑定是最常用的方法。它通过在HTML页面中嵌入隐藏的表单并在加载时自动提交来实现。
SAML 2.0 测试指南
测试环境搭建
要测试SAML 2.0集成,您需要设置以下组件:
- 身份提供者(IdP)实例(如Shibboleth、SimpleSAMLphp等)
- 服务提供者(SP)实例(您的应用程序)
- 支持SAML的测试工具或库
关键测试场景
成功的SAML 2.0测试应涵盖以下场景:
- 正常的单点登录流程
- 单点登出流程
- 错误处理(如无效签名、过期断言等)
- 名称标识符管理
常见问题排查
在SAML 2.0集成过程中,常见问题包括时钟偏差、证书验证失败、断言属性映射错误等。确保IdP和SP的时间同步,并仔细检查证书配置。