协议概述
安全断言标记语言(Security Assertion Markup Language,SAML)是一个基于 XML 的开源标准数据格式,它在当事方之间交换身份验证和授权数据,尤其是在身份提供者和服务提供者之间交换。
名词说明
委托人:SAML 规范定义的三个角色之一,通常为一名用户。
IdP:Identity Provider,身份提供者,SAML 规范定义的三个角色之一,通常指身份鉴别服务器。
SP:Service Providers,服务提供者,SAML 规范定义的三个角色之一。
Assert:断言,是指 IdP 认证用户后,发送认证结果给 SP 的一种形式,以表示委托人的基本信息、权限信息等。
应用场景
SAML 解决的最重要的需求是网页浏览器单点登录。在 SAML 协议中,一旦用户身份被 IdP 认证过后,该用户再去访问其他在主站注册过的应用(SP)时,都可以直接登录,而不用再输入身份和口令。
运行流程
1. 委托人访问 SP 的某个受保护资源,例如,浏览器打开 http://www.abc.com/resource1。
2. SP 发现当前委托人没有认证信息,需要进行身份认证,则生成一个 SAML 认证请求数据包,并发送请求到 IdP。
3. 委托人进行身份认证。
4. IdP 确认身份认证通过后,生成断言,断言可包括但不限于委托人姓名、手机号码、邮箱、权限等信息。
5. IdP 使用私钥对断言进行签名,然后将签名信息、用户身份、自定义断言属性等包装成特定 XML 格式的返回报文,通过 POST 方式重定向回 SP。
6. SP 验证返回报文中的签名信息,并从报文中获取断言,进而完成后续登录流程。
数字身份管控平台(员工版)功能概述
协议版本
目前支持
urn:oasis:names:tc:SAML:2.0:nameid-format:persistent
。自定义断言属性
创建应用或配置应用时设置的 Assertion Attribute,表示断言应包含的属性。属性名可根据实际情况填写,属性值支持用户名称、用户昵称、手机号码、邮箱地址,如下:
其他断言信息
签名信息(Signature)
采用 RSA 数字证书私钥,对断言信息进行数字签名。
用户身份(Subject)
具体取值为:
当登录用户没有绑定应用账号(映射关系)时,subject 取值为登录用户名(userName)。
当登录用户绑定了唯一一个应用账号(映射关系)时,subject 取值为应用账号名(accountName)。
当登录用户绑定了多个应用账号(映射关系)时,登录成功后不会跳转到应用系统,而是跳转到门户应用列表页面,用户选择指定的登录账号后,单击应用图标进行登录,如下: