1、什么是SAML:
SAML是Web浏览器用来通过安全令牌启用单点登录(SSO)的标准协议
2、优点:
跨多个应用程序管理用户身份和授权。
3、单点登录(SSO)是什么:
它使用户仅使用一组凭据(用户名和密码)登录一次,就可以安全地对多个应用程序和网站进行身份验证。
4、SSO如何工作?
使用SSO,用户尝试访问的应用程序或网站依赖于受信任的第三方来验证用户的身份。
5、SAML 相关定义
-
SP(Service Provider): 向用户提供正式商业服务的实体,通常需要认证一个用户的身份;
-
IDP(Identity Provider): 提供用户的身份鉴别,确保用户是其所声明的身份
-
断言 (Assertions) 即信息:断言是在 SAML 中用来描述认证的对象,其中包括一个用户在什么时间、以什么方式被认证,同时还可以包括一些扩展信息,比如用户的 Email 地址和电话等等。
- 协议 (Protocol) 即通信:协议规定如何执行不同的行为。这些行为被细化成一些列的 Request 和 Response 对象,而在这些请求和相应的对象中包含了行为所特别需要的信息。
-
绑定 (Binding) 即传输:绑定定义了 SAML 信息如何使用通信协议被传输的。比如,HTTP 重定向绑定,即声明 SAML 信息将通过 HTTP 重定向消息传输;再比如 SAML SOAP 绑定,声明了通过 SOAP 来传递 SAML 消息。比如上面 AuthnRequest 就声明了 Http-POst 绑定
- 元数据 (MetaData):SAML 的元数据是配置数据,其包含关于 SAML 通信各方的信息,比如通信另一方的 ID、Web Service 的 IP 地址、所支持的绑定类型以及通信中实用的密钥等等。
6、saml标准的结构:
saml标准从内到外 可以分为上图的4个层次:
1. Assertion。 断言。 规定了断言的xml结构, 例如:
==============
<saml:Assertion>
..............
</saml:Assertion?
==============
它规定了,这个assertion节点到底该怎么写, 其实就是这个节点的schema。 按照这个规定写出来的assertion别人才能认识。
2. Protocols。协议。它规定了如何请求(samlrequest)和回复(samlresponse )saml消息,其中当然包含assertion的消息。比如:
===============
<samlp:AuthnRequest>
............
</samlp:AuthnRequest>
还有:
<samlp:Response>
..............
</samlp:Response>
===============
它规定了怎么发送这些请求消息,和回复消息的结构。 这样sp,idp之间才能通信。
3. 绑定。 上面两点都是规定了静态结构。 具体这些消息怎么发送呢。 就是用什么协议来承载这些smal消息呢。就是绑定出马了。 最常用的就是http或者soap消息。 把上面的saml消息通过http或者soap消息来传输。 这样sp和idp就能通信了。 saml1.1只支持 http的soap绑定。 而saml2.0支持更多的绑定。 有兴趣自己阅读标准。 这里需要强调的是, 你可能已经想到了,那就是这个绑定其实不重要。 只要saml消息本身是完整的可靠的,下层用什么协议传输不重要。 对。 saml标准规定的绑定只是一种标准实现。 saml的消息可以绑定到任何协议上, 只要sp和idp实现协商好就行了。 这里面应用最广泛的恐怕要算saml的wss绑定了。 用在微软的一系列产品里面。 包括sharepoint online的登陆授权, windows azure登陆,以及windows store的登陆授权等等。 微软自己在ws-trust和ws-secure协议上传输了saml消息。 这恐怕是saml标准以外用的最多的绑定了。
4. Profile, 这个单词我实在不知道翻译成啥好,所以就写原文把。 我个人喜欢把它叫做一套配置,或者叫解决方案。 它规定了某些场景下一整套saml认证的细节和步骤。 比如, 它规定了比较著名的SSO方案。 就是如何用saml实现sso的一整套配置和详细步骤。 概念就是这样。 同上, 上面的绑定都不确定,所以这个profile就更自由了。 你可以使用任何自己定义的profile,只要你们自己协商好就行了。