http://blog.csdn.net/csethcrm/article/details/20694993

一、背景知识:

SAML即安全断言标记语言,英文全称是Security Assertion Markup Language。它是一个基于XML的标准,用于在不同的安全域(security domain)之间交换认证和授权数据。在SAML标准定义了身份提供者(identity provider)和服务提供者(service provider),这两者构成了前面所说的不同的安全域。 SAML是OASIS组织安全服务技术委员会(Security Services Technical Committee)的产品。

SAML(Security Assertion Markup Language)是一个XML框架,也就是一组协议,可以用来传输安全声明。比如,两台远程机器之间要通讯,为了保证安全,我们可以采用加密等措施,也 可以采用SAML来传输,传输的数据以XML形式,符合SAML规范,这样我们就可以不要求两台机器采用什么样的系统,只要求能理解SAML规范即可,显 然比传统的方式更好。SAML 规范是一组Schema 定义。

可以这么说,在Web Service 领域,schema就是规范,在Java领域,API就是规范。

  SAML 作用

SAML 主要包括三个方面:

1.认证申明。表明用户是否已经认证,通常用于单点登录。

2.属性申明。表明 某个Subject 的属性。

3.授权申明。表明 某个资源的权限。

  SAML框架

SAML就是客户向服务器发送SAML 请求,然后服务器返回SAML响应。数据的传输以符合SAML规范的XML格式表示。

SAML 可以建立在SOAP上传输,也可以建立在其他协议上传输。

因为SAML的规范由几个部分构成:SAML Assertion,SAML Prototol,SAML binding等

  安全
由于SAML在两个拥有共享用户的站点间建立了信任关系,所以安全性是需考虑的一个非常重要的因素。SAML中的安全弱点可能危及用户在目标站点的个人信
息。SAML依靠一批制定完善的安全标准,包括SSL和X.509,来保护SAML源站点和目标站点之间通信的安全。源站点和目标站点之间的所有通信都经
过了加密。为确保参与SAML交互的双方站点都能验证对方的身份,还使用了证书。

   应用

目前SAML已经在很多商业/开源产品得到应用推广,主要有:

IBM Tivoli Access Manager
Weblogic
Oblix NetPoint
SunONE Identity Server
Baltimore, SelectAccess
Entegrity Solutions AssureAccess
Internet2 OpenSAML
Yale CAS 3
Netegrity SiteMinder
Sigaba Secure Messaging Solutions
RSA Security ClearTrust
VeriSign Trust Integration Toolkit
Entrust GetAccess 7

二、基于 SAML的SSO

下面简单介绍使用基于SAML的SSO登录到WebApp1的过程(下图源自SAML 的 Google Apps SSO,笔者偷懒,简单做了修改)

此图片说明了以下步骤。

  1. 用户尝试访问WebApp1。
  2. WebApp1 生成一个 SAML 身份验证请求。SAML 请求将进行编码并嵌入到SSO
    服务的网址中。包含用户尝试访问的 WebApp1 应用程序的编码网址的 RelayState 参数也会嵌入到 SSO 网址中。该
    RelayState 参数作为不透明标识符,将直接传回该标识符而不进行任何修改或检查。
  3. WebApp1将重定向发送到用户的浏览器。重定向网址包含应向SSO 服务提交的编码 SAML 身份验证请求。
  4. SSO(统
    一认证中心或叫Identity Provider)解码 SAML 请求,并提取 WebApp1的
    ACS(声明客户服务)网址以及用户的目标网址(RelayState
    参数)。然后,统一认证中心对用户进行身份验证。统一认证中心可能会要求提供有效登录凭据或检查有效会话 Cookie 以验证用户身份。
  5. 统一认证中心生成一个 SAML 响应,其中包含经过验证的用户的用户名。按照 SAML 2.0 规范,此响应将使用统一认证中心的 DSA/RSA 公钥和私钥进行数字签名。
  6. 统一认证中心对 SAML 响应和 RelayState 参数进行编码,并将该信息返回到用户的浏览器。统一认证中心提供了一种机制,以便浏览器可以将该信息转发到 WebApp1 ACS。
  7. WebApp1使用统一认证中心的公钥验证 SAML 响应。如果成功验证该响应,ACS 则会将用户重定向到目标网址。
  8. 用户将重定向到目标网址并登录到 WebApp1。

三、开源资源:

1,SAML SSO for ASP.NET
http://samlsso.codeplex.com/

其中SAML组件使用的是ComponentSpace SAML v2.0 for .NET,此组件貌似是澳洲一家公司开发的,收费,但不贵。

里边有VS05,08,10的例子(部分例子是C#,部分是vb.net),也有java调用.net SSO的例子。

2,a set of WinForms and WebForms SAML demos with Full Source Code

http://samlclients.codeplex.com/

此开源项目采用的是UltimateSaml.dll SAML组件,但不开源。里边同时有C#、Vb.net的例子,Webform及winform的例子。

四、网友的文章推荐:

  1. 揭开SAML的神秘面纱(转)
    http://www.cnblogs.com/perfectdesign/archive/2008/04/10/saml_federation.html
  2. Web 单点登录系统
    http://blog.csdn.net/shanyou/article/details/5372233
  3. 基于SAML的单点登录.NET代理端实现方案
    http://www.cnblogs.com/jingtao/archive/2011/03/18/1988435.html
  4. SAML

http://blog.csdn.net/chmsword/article/details/4269602

五、本人实现的SSO(介绍建立一个demo简单的思路)

  1. 采用开源项目http://samlsso.codeplex.com/
  2. 建立一个认证中心(IDP),二个web应用(SP1),一个类库SSO.Client

a,其中IDP包括2+3个网页
2个:一个Default.aspx,一个Login.aspx
3个:SSOService.aspx(单点登录服务),SingleLogoutService.aspx(单点登录退出服务),ArtifactResponder.aspx(HTTP-Artifact应答服务)

b,2个Web的应用结构类似

1+3个网页
1个:default.aspx主页,获取登录信息
3个:AssertionConsumerService.aspx(校验IDP返回的SAML服务)
SingleLogoutService.aspx(校验IDP返回的退出请求及响应)
ArtifactResponder.aspx(HTTP-Artifact应答服务)

c,SSO.Client类库

      主要包括一个SSOEntry 及SSOConfig(配置类)【思想可以参考:基于SAML的单点登录.NET代理端实现方案
http://www.cnblogs.com/jingtao/archive/2011/03/18/1988435.html

 

其中SSOEntry部分代码如下:

public class SSOEntry : System.Web.IHttpModule  , IRequiresSessionState, IConfigurationSectionHandler

   {
         #region IHttpModule 成员

System.Web.HttpApplication Context;

public void Dispose()
       {
           // throw new Exception("The method or operation is not implemented.");

       }

public void Init(System.Web.HttpApplication context)
       {
           Context = context;
           context.AcquireRequestState += new EventHandler(context_BeginRequest);

}
       public object Create(object parent, object configContext, XmlNode section)

       {
           NameValueSectionHandler handler = new NameValueSectionHandler();
           return handler.Create(parent, configContext, section);
       }

void context_BeginRequest(object sender, EventArgs e)
       {
           HttpApplication application = (HttpApplication)sender;

Uri url = application.Request.Url;
           //如果不是aspx网页,就不管他了,还可以再加上其它条件,根据正则过滤一些无需单点登录的页面
           if (!url.AbsolutePath.EndsWith(".aspx",
StringComparison.OrdinalIgnoreCase) ||
url.AbsolutePath.IndexOf("/SAML")>-1)

               return;

HttpResponse Response = Context.Response;
           //Response.AddHeader("P3P", "CP=CAO PSA OUR");//加上这个,防止在Iframe的时间Cookie丢失

if ("" == Context.User.Identity.Name)
           {
               RequestLoginAtIdentityProvider(application);  // 这个方法可以参考开源项目,此处不介绍

           }

}

#endregion

…… 其它代码省略

}

d,WebSite1,WebSite2调用SSO.Client

只需修改Web应用的web.config配置文件即可,加入如下配置信息。这样在请求Web应用的aspx页面时,将首先通过
SSO.Client.SSOEntry的context_BeginRequest方法判断用户是否已登录,若未登录或者已超时则生成SAML请求转发
至统一认证中心(IDP)

<!--模块或子系统配置段配置信息-->
<configSections>
   <section name="SSO" type="SSO.Client.SSOEntry,SSO.Client"/>
</configSections>
<!--单点登陆配置信息-->

<SSO>

<!--单点登陆登陆页面地址-->
   <add key="SSO.DefaultURL" value="http://127.0.0.1/website1"/>

   <!--单点登陆服务的页面地址-->
   <add key="SSO.SSOServiceURL" value="http://127.0.0.1/SSOIDP/SAML/SSOService.aspx"/>

   <add key="SSO.LogoutServiceURL" value="http://127.0.0.1/SSOIDP/SAML/SingleLogoutService.aspx"/>

   <!--
     Configuration for communicating with the IdP.
     Valid values for ServiceBinding(SP to IDP) are:
         urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST
         urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect
         urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact
   -->
   <add key="SSO.SpToIdpBinding" value="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"/>

   <!--
   Valid values for ServiceBinding(IDP to SP) are:
   urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST
  urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact
  -->
   <add key="SSO.IdpToSPBinding" value="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"/>

   <!--<add key="SSO.ArtifactResolutionServiceURL" value="http://127.0.0.1/SSOIDP/SAML/ArtifactResolutionService.aspx"/>-->

</SSO>

六、基于SAML的SSO的好处

  1. 出现大大简化了SSO,提升了安全性
  2. 跨域不再是问题,不需要域名也可访问
  3. 不仅方便的实现Webform、Winform的单点登录,而且可以方便的实现java与.net应用的单点登录

本人只是粗略研究了基于SAML的单点登录应用,认知有限,不对之处请各位前辈指点。同时借此博文分享我的学习心得,抛砖引玉。

基于SAML的单点登录介绍的更多相关文章

  1. (转)基于SAML的单点登录介绍

    转:http://www.cnblogs.com/zsuxiong/archive/2011/11/19/2255497.html 一.背景知识: SAML即安全断言标记语言,英文全称是Securit ...

  2. 基于云端的通用权限管理系统,SAAS服务,基于SAAS的权限管理,基于SAAS的单点登录SSO,企业单点登录,企业系统监控,企业授权认证中心

    基于云端的通用权限管理系统 SAAS服务 基于SAAS的权限管理 基于SAAS的单点登录SSO 基于.Net的SSO,单点登录系统,提供SAAS服务 基于Extjs 4.2 的企业信息管理系统 基于E ...

  3. 基于CAS的单点登录实战(2)-- 搭建cas的php客户端

    在这之前已经搭好了CAS服务端 基于CAS的单点登录实战(1)-- 搭建cas服务器 PHP-Client php-Client是官方支持的,去官网下个最新版就好了.phpCAS 接入很简单,解压放到 ...

  4. 手把手教你学会 基于JWT的单点登录

      最近我们组要给负责的一个管理系统 A 集成另外一个系统 B,为了让用户使用更加便捷,避免多个系统重复登录,希望能够达到这样的效果--用户只需登录一次就能够在这两个系统中进行操作.很明显这就是单点登 ...

  5. 基于CAS实现单点登录(SSO):工作原理

    工作中使用到了SSO,网上看到了这个博客的一系列文章感觉不错,转载收藏 源地址http://blog.csdn.net/tch918/article/details/19930037 系列文章的第一篇 ...

  6. SSO单点登录学习总结(2)——基于Cookie+fliter单点登录实例

    1.使用Cookie解决单点登录 技术点: 1.设置Cookie的路径为setPath("/").即Tomcat的目录下都有效 2.设置Cookie的域setDomain(&quo ...

  7. 登录&单点登录介绍

    COOKIE & SESSION & TOKEN 主要用来跟踪会话,识别用户所用.cookie 是客户端,session 是服务端的. 因为 http 是无状态协议,每一次的访问都不知 ...

  8. 基于.Net的单点登录(SSO)解决方案

    前些天一位朋友要我帮忙做一单点登录,其实这个概念早已耳熟能详,但实际应用很少,难得最近轻闲,于是决定通过本文来详细描述一个SSO解决方案,希望对大家有所帮助.SSO的解决方案很多,但搜索结果令人大失所 ...

  9. SSO 基于CAS实现单点登录 实例解析(二)

    本文目录: 概述 演示环境 部署CAS-Server相关的Tomcat 部署CAS-Client相关的Tomcat 测试验证SSO 第一: 本demo在一个机器上实现(三个虚拟主机),来看SSO单点登 ...

随机推荐

  1. iBatis系列之三

    iBatis和Hibernate最大差别就是在于iBatis没有严格的和具体的表做关联:而是将结果集和DAO做关联. iBatis的SqlConfig.xml配置一个properties文件,其实可以 ...

  2. Android动画总结#补间动画(Tween Animation/View Animation) #帧动画(Frame Animation/Drawable Animation)#属性动画(PropertyAnimation)

    1.共有三种动画,英文名字多种叫法如下 第一种动画:补间动画(Tween Animation/View Animation) 四个:RotateAnimation旋转. AlphaAnimation透 ...

  3. BZOJ 1629: [Usaco2007 Demo]Cow Acrobats

    Description Farmer John's N (1 <= N <= 50,000) cows (numbered 1..N) are planning to run away a ...

  4. Dirichlet Process 和 Dirichlet Process Mixture模型

    Dirichlet Process 和 Dirichlet Process Mixture模型 [本文链接:http://www.cnblogs.com/breezedeus/archive/2012 ...

  5. X窗口系统的协议和架构

    转自X窗口系统的协议和架构 在电脑中,X窗口系统(常称作 X11.X)是一种以位图显示的网络透明化窗口系统.本条目详述 X11 的协议及其技术架构. X C/S模型和网络透明性 X 基于C/S模型.运 ...

  6. phpStorm 快捷键收集以及配色方案

    仅收集我在开发过程中觉得对我个人很有帮助的 ctrl + e ;查看最近打开的工程文件 ctrl+shift+n比如要跳转到templates/default/index.html基本上输入te/de ...

  7. Wordpress 网站搭建及性能监控方法详解!

    前言 说到 Wordpress,大家往往想到的是博客,其实,如今的 WordPress 已经成为全球使用量最多的开源 CMS 系统.并且,如果你有一定的技术基础稍加改动,就可以搭建出新闻网站.企业网站 ...

  8. SPRING IN ACTION 第4版笔记-第二章WIRING BEANS-006-当构造函数有集合时的注入

    一.当构造函数有集合时,只能用<CONSTRUCTOR-ARG>,不能用C-NAMESPACE 二. 1. package soundsystem.collections; import ...

  9. openCV python 安装

    0, 用 import cv 测试,发现没有安装 opencv 模块. 首先先说本开发环境是在windows xp的环境下进行搭建的. 在搭建的过程中需要保证这三个条件: 1.python需要安装py ...

  10. bzoj1799

    这是一道比较难的数位dp 因为逐位统计好像无法处理数位和整除原数的 但是有了刚才的bzoj1072的经验,我们能做的是逐位处理被一个数d整除的方案 不难想到先穷举数位和now,now最大也就162,可 ...