安全断言标记语言详解
安全断言标记语言(Security Assertion Markup Language,简称SAML)是一种基于XML的开源标准数据格式。它在身份提供者与服务提供者之间交换身份验证和授权数据,尤其是在不同实体间传递身份信息时十分有用。其中,SAML 2.0能够支持跨域的单点登录(SSO),有效减少了向用户分发多个身份验证令牌的管理开销。
SAML中的主体角色
在SAML协议中,主要涉及两个核心实体:
服务提供方(Service Provider,简称SP),通常指代如阿里云控制台、腾讯云控制台、AWS控制台等提供服务的平台。
身份提供方(Identity Provider,简称IdP),例如Authing,其功能是向SP发送身份断言。这种身份断言是一种由IdP签发的XML格式的Token,可以标识某个人的身份。除Authing外,还有Okta、SSOCircle、Auth0等其它身份提供方也可以向SP返回身份断言。
信息交换流程与机制
这两个主体通过用户的浏览器进行信息交换。具体而言,SP可以通过带参数的重定向HTTP响应将信息立即传递给IdP。而当IdP需要用户进行身份验证时,会展示一个表单并附上一段立即提交表单的JS代码,从而让用户迅速将信息发送给SP。
简而言之,当SP需要知道用户的身份时,会向IdP询问。IdP在用户成功登录后,将用户的身份以SAML断言的形式传送给SP。由于SP信任IdP发来的身份断言,因此会赋予该用户在SP的相关权限。
SAML请求与响应过程
当用户的身份无法确定时,SP会通过浏览器向IdP发送SAML Request信息以请求鉴定用户身份。这一请求信息通常以SAMLRequest参数的形式通过query在URL中发送给IdP。
整个过程中,浏览器作为通信的媒介,协助SP和IdP完成信息的交换和验证。
SAML协议的通信方式
在SP与IdP之间的通信中,主要采用三种HTTP绑定方式:HTTP Redirect Binding、HTTP POST Binding以及HTTP Artifact Binding。
HTTP Redirect Binding中,SP通过重定向GET请求发送SAML Request至IdP,而IdP则通过立即提交的Form表单以POST请求的方式返回SAML Response至SP。
HTTP POST Binding则是双方均通过立即提交的Form表单进行请求和响应的发送。
而HTTP Artifact Binding则是一种更为安全的通信方式。在此方式中,SP和IdP只通过浏览器交换SAML Request和SAML Response的索引编号。实际的内容则在后端通过请求对方的Artifact Resolution Service接口来获取。
通过这样的机制,可以有效保护SAML Request和SAML Response不被直接在前端。