SAML概念

SAML

SAML是一种XML框架用来交换安全信息,其中定义了按照安全规范所需要的通信的协议和格式。

SAML是一种中心化的认证机制,其定义了两种实体相互通信:

  • Service Provider(SP): 向用户提供正式商业服务的实体,通常需要认证一个用户的身份(比如本次开发服务的员工管理系统,财务报销系统等);
  • Identity Provider(IDP): 提供用户的身份鉴别方,用以确保用户是其所声明的身份(比如本次公司提供统一登录的sso方);

SAML的重要用途:

  • 单点登录(SSO Single Sign-ON);
  • 联合认证(Federated Identity);
  • 在其他架构内使用SAML,比如WS-Security;

SAML在单点登录中大有用处:在SAML协议中,一旦用户身份被主网站IDP认证过后,该用户再去访问其他在主站注册过的应用SP时,都可以直接登录,而不用再输入身份和口令。

OPENSAML

OpenSAML是一个便于使用SAML消息的依赖库,其提供的主要功能包括:

  1. 创建SAML消息;
  2. 解析SAML对象并导出为XML格式;
  3. 签名和加密;
  4. 对SAML消息进行编码并传输。

目前OpenSAML库提供Java和C++实现的版本,需要注意的是OpenSAML虽然多应用用于SSO(单点登录)的开发中,

但是该库本身不提供任何身份识别和授权的功能,其只是实现对于SAML消息的相关操作而已。

SAML通过Web浏览器实现的协议流程

saml.png

1. 用户尝试获得权限

流程首先从一个非认证的用户开始,该用户尝试从一个受保护的SP那里获得访问权限。某种方式的过滤器被设置在访问路径上来检测用户是否被授权。

这一部分其实并不是SAML协议里的内容,但是却决定了是否要被授权。

2. 用户被重定向到IDP

当访问路径上被设置的过滤器发现用户并非是被认证的,将会自动把用户从定向到IDP,以求验证用户的身份。

3. 用户被认证

在这一步里,用户被认证。注意这里并没任何涉及到SP的交互,在安全方式内,IDP对于认证用户有着全权责任。

4. 已认证的用户被从定向回SP

当用户被认证成功之后,用户会携带着SAML产物(SAML artifact)被从定向回SP。这样的SAML产物也可以说是认证信息的标识,因为认证信息中有敏感的信息不能直接通过浏览器传输,所以这里只是发送标识而已。

5. 要求认证信息

当收到SAML产物之后,SP将其发送回IDP,IDP依据SAML产物找到认证信息,并通过SAML产物响应(SAML Artifact Response)发送回SP

SAML相关定义

1. 断言(Assertions) 即信息

断言是在SAML中用来描述认证的对象,其中包括一个用户在什么时间、以什么方式被认证,同时还可以包括一些扩展信息,比如用户的Email地址和电话等等。


      IDP
      
         
            
            
            
               ....
               
               xxx
            
         
         xxx
         xxx
      
      
         [email protected]
         ...
      
      ...
      ...
      ...
   

2. 协议(Protocol)即通信

协议规定如何执行不同的行为。这些行为被细化成一些列的Request和Response对象,而在这些请求和相应的对象中包含了行为所特别需要的信息。

比如,认证请求协议(AuthnRequest Protocol)就规定了一个SP如何请求去获得一个被认证的与用户。


    xxx
    
    
        
            urn:oasis:names:tc:SAML:2.0:ac:classes:Password
        
    

3. 绑定(Binding)即传输

绑定定义了SAML信息如何使用通信协议被传输的。

其实SAML2.0中支持很多种绑定方式,如下都方式在OpenSAML中都有实现:

  • SAML SOAP Binding (based on SOAP 1.1)
  • Reverse SOAP (PAOS) Binding
  • HTTP Redirect (GET) Binding
  • HTTP POST Binding
  • HTTP Artifact Binding
  • SAML URI Binding

配置(Profiles) 即综合

配置定义了如何组织以上信息,并且在一个更高的层次上描述断言,协议和绑定如何被使用去解决一个具体情况。比如Web浏览器的SSO配置就描述了如何一个用户使用浏览器被认证。

元数据(MetaData)

SAML的元数据是配置数据,其包含关于SAML通信各方的信息,比如通信另一方的ID、Web Service的IP地址、所支持的绑定类型以及通信中实用的密钥等等。

OpenSaml中提供了metadata provider来帮助构建和解读元数据。

google 和 火狐带有插件工具 SAML TRACER,在浏览器中添加一个窗口来显示SAML消息

你可能感兴趣的:(SAML概念)