SAML
SAML(Security Assertion Markup Language)是一个基于XML的开源标准数据格式,它在当事方之间交换身份验证和授权数据,尤其是在身份提供者和服务提供者之间交换。SAML2.0可以实现基于网络跨域的单点登录(SSO),以便于减少向一个用户分发多个身份验证令牌的管理开销。
SAML协议中涉及两个主体:
SP(Service Provider),服务提供方。例如阿里云控制台、腾讯云控制台。
IDP(Identity Provider),身份提供方。身份提供方能够向SP发送身份断言,所谓身份断言就是由Authing签发的,可以标识某个人身份的Token,只不过,在SAML协议中,这个Token的格式是XML格式的。
两个主体通过用户的浏览器进行信息交换。
SAML Request
当用户的身份无法鉴定时,SP会像IDP发送SAML Request信息(通过浏览器发送),请求IDP来鉴定用户身份。
SAML Request参数通过query在URL中发送给IDP。
SAML Response
IDP收到SAML Request后,会弹出登录框对用户身份进行认证。
当用户在IDP完成登录后,SAML IDP将用户身份断言发送给SP(放在表单中,通过浏览器POST请求发送)。
身份断言是 HTML form表单和一段立即提交该表单的JS代码。其中表单input中的值是用户的身份断言,也就是用户的 Token,只不过这个 Token 通过 XML 格式传递。
SAML流程
使用 SAML 协议进行身份认证时,涉及到以下三个主体
浏览器:SP 和 IdP 借助浏览器互相通信
SP:资源提供方
IdP:身份认证提供方
SP 与 IdP 之间通信方式
- HTTP Redirect Binding
SP 通过重定向 GET 请求把 SAML Request 发送到 IdP,IdP 通过立即提交的 Form 表单以 POST 请求的方式将 SAML Response 发到 SP。
- HTTP POST Binding
IdP 通过立即提交的 Form 表单以 POST 请求的方式将 SAML Request 发到 SP。IdP 通过立即提交的 Form 表单以 POST 请求的方式将 SAML Response 发到 SP。
- HTTP Artifact Binding
SP、IdP 双方只通过浏览器交换 SAML Request、SAML Response 的索引编号,收到编号后,在后端请求对方的 Artifact Resolution Service 接口来获取真正的请求实体内容。从而避免 SAML Request、SAML Response 暴露在前端。