简介
SAML的全称是Security Assertion Markup Language, 是由OASIS制定的一套基于XML格式的开放标准,用在身份提供者(IdP)和服务提供者 (SP)之间交换身份验证和授权数据。
SAML的一个非常重要的应用就是基于Web的单点登录(SSO)。
接下来我们一起来看看SAML是怎么工作的。
SAML的构成
在SAML协议中定义了三个角色,分别是principal:代表主体通常表示人类用户。identity provider (IdP)身份提供者和service provider (SP)服务提供者。
IdP的作用就是进行身份认证,并且将用户的认证信息和授权信息传递给服务提供者。
SP的作用就是进行用户认证信息的验证,并且授权用户访问指定的资源信息。
SAML的优势
为什么要使用SAML呢?
第一可以提升用户体验,如果系统使用SAML,那么可以在登录一次的情况下,访问多个不同的系统服务。这实际上也是SSO的优势,用户不需要分别记住多个系统的用户名和密码,只用一个就够了。
第二可以提升系统的安全性,使用SAML,我们只需要向IdP提供用户名密码即可,
第三用户的认证信息不需要保存在所有的资源服务器上面,只需要在在IdP中存储一份就够了。
SAML是怎么工作的
接下来,我们通过一个用SAML进行SSO认证的流程图,来分析一下SAML是怎么工作的。
根据请求方式有redirect和post的不同,使用SAML来进行SSO认证有通常有三种方式,我们一一道来。
SP redirect request; IdP POST response
上图中User Agent就是web浏览器,我们看一下如果用户想请求Service Provider的资源的时候,SAML协议是怎么处理的。
1.用户通过User Agent请求Service Provider,比如:
http://sp.flydean.com/myresource
SP将会对该资源进行相应的安全检查,如果发现已经有一个有效的安全上下文的话,SP将会跳过2-7步,直接进入第8步。
2.如果在第一步的时候,SP并没有找到相应的有效安全上下文的话,则会生成对应的SAMLRequest,并将User Agent重定向到IdP:
302 Redirect
Location: https://idp.flydean.com/SAML2/SSO/Redirect?SAMLRequest=request&RelayState=token
RelayState是SP维护的一个状态信息,主要用来防止CSRF攻击。
其中这个SAMLRequest是用Base64编码的samlp:AuthnRequest,下面是一个samlp:AuthnRequest的例子:
<samlp:AuthnRequestxmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"xmlns:saml&#