SAML,称为安全断言标记语言,是一种针对安全断言的标记预加载,最新版本是2.0。
SAML在单点登录中非常有用:在SAML协议中,一旦用户的身份被主网站认证,当用户访问主站注册的其他应用时,无需输入身份和密码就可以直接登录。
SAML本身是一个非常复杂的协议,这里只选取最重要的部分给大家讲解。更多详情请参考官方文件,后续文章会进一步分析。
SAML协议的核心是IDP和SP通过用户浏览器的重定向访问进行数据交换。
SP向IDP发送SAML认证请求消息,请求IDP认证用户身份;IDP向用户询问用户名和密码,并验证它们是否正确。如果验证正确,IDP向SP返回SAML认证响应,表示用户已经成功登录。此外,响应中还包含一些附加信息,以确保响应被篡改和伪造。
我们举一个用户登录SP,SP向IDP发送请求确认用户身份的例子,看看SAML的工作流程。比如SP是谷歌的Apps,IDP是某大学的身份服务器,爱丽丝是该大学的学生。
image.png
现在爱丽丝想通过浏览器查看她的电子邮件,爱丽丝通常通过浏览器访问网页,如https://mail.google.com/a/my-university.nl。因为这是一个联合身份域,谷歌不会询问用户的用户名和密码,而是指导他们向IDP认证他们的身份。用户重定向到的网址类似于:
https: //idp.uni.nl/sso?SAMLRequest = fvlltuswen0j 8q…c % 3D
嵌入在HTTP请求中的SAMLRequest是SAML认证请求消息。因为SAML是基于XML的,所以完整的认证请求消息只有经过压缩和编码后才能传输。在压缩和编码之前,SAML消息具有以下格式:
& ltAuthnRequest ID= "kfcn...lfki " Version = " 2.0 " issuen instant = " 2013-02-05t 08:28:50Z " ProtocolBinding = " urn:oasis:name:TC:SAML:2.0:bindings:HTTP-POST " Provi DerName = " Google . com " AssessionConsumerServiCeURL = " https://www . Google . com/a/uni . nl/ACS " & gt;& lt发行人>。google.com & lt/发卡行>。& ltNameIdPoLicy AllowCreate = " true " Format = " urn:oasis:name:TC:SAML:1.1:NameId-Format:unspecified "/>;;& lt/AuthnRequest >;
以上内容用最直白的方式解释:请验证当前用户的身份,并从Google返回此请求的结果。
当IDP收到消息并确认接受认证请求时,它会要求爱丽丝输入用户名和密码来验证她的身份;认证通过后,Alice的浏览器会跳回谷歌的特定页面。同样,SAML认证响应的内容经过压缩编码后以参数的形式传输。在压缩和编码之前,它的结构类如下:
& ltresponse version = " 2.0 " issuen instant = " 2013-02-05t 08:29:00Z " Destination = " https://www . Google . com/a/my . uni . nl/ACS " in response to = " kfcn...lfki ">。& lt发行人>。https://idp.uni.nl/ & lt;/发卡行>。& lt状态>。& ltstatus colomble = " urn:oasis:name:TC:SAML:2.0:status:Success "/>& lt/状态>;& ltassessorityversion = " 2.0 " issuen instant = " 2013-02-05T 08:29:00Z " >& lt发行人>。https://idp.uni.nl/ & lt;/发卡行>。& lt主题>。& ltNameID>。alice <。/NameID>。& lt主题确认...>。& ltsubjectconfirmationdatanotanonorafter = " 2013-02-05t 08:34:00Z "收件人= " https://www . Google . com/a/my . uni . nl/ACS " in response to = " kfcn...lfki"/>& lt/SubjectConfirmation>。& lt/Subject >& lt条件之前="2013-02-05T08:28:30Z "之后="2013-02-05T08:34:00Z " >;& lt/条件>& ltauthnstatementauthinstant = " 2013-02-05t 08:29:00Z " session tontorafter = " 2013-02-05t 16:29:00Z & gt;& lt/AuthStatement >& lt/断言>& lt/Response>。
虽然内容很多,但主要表达的是消息来自idp.uni.nl,名为Alice的用户身份已经过我验证,消息有效期为2分钟。此外,重定向的URL应该具有消息的签名,以确保它不会被篡改。验证签名的公钥和算法由IDP和SP预先协商。
在收到SAML认证响应后,Google将首先验证消息的签名是否正确以及是否因超时而无效。然后从认证消息中提取Google可以识别的用户身份。如果上述所有步骤都成功,用户将成功登录谷歌。
为了便于解释,上述示例中的信息是可读的。如果想看到真实的SAML信息,建议使用Firefox浏览器的插件工具SAML tracer。该插件将在浏览器中添加一个窗口来显示SAML消息。以下是截图:
SAML跟踪器
希望以上内容能帮助你理解SAML协议。SAML协议的内容很复杂,但是单点登录相关的内容就是基于以上内容。
1.《SAML SAML2.0入门指南》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《SAML SAML2.0入门指南》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/yule/1778717.html