关于SSO(单点登录),百度百科解释如下 :

  “SSO英文全称Single Sign On,单点登录。SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制。它是目前比较流行的企业业务整合的解决方案之一。

  要实现SSO的功能,让用户只登录一次,就必须让应用系统能够识别已经登录过的用户。应用系统应该能对ticket进行识别和提取,通过与认证系统的通讯,能自动判断当前用户是否登录过,从而完成单点登录的功能。
  单一的用户信息数据库并不是必须的,有许多系统不能将所有的用户信息都集中存储,应该允许用户信息放置在不同的存储中,事实上,只要统一认证系统,统一ticket的产生和校验,无论用户信息存储在什么地方,都能实现单点登录。
  统一的认证系统并不是说只有单个的认证服务器。”
  总结出几个要素:
    1. 多个应用系统 (本文中局限于专属web类B/S信息业务系统)。    --    针对的现实业务场景
    2. 只需成功登录一次(可以在应用系统各自的登录界面登录,亦可在统一认证服务器登录界面登录)。  --   要达到的目的:简单、易用、人性化
    3. 认证服务器集中统一发放票据ticket。   --   关键流程1:发票
    4. 各个业务系统对ticket提取、认证服务器再识别、信任互访。   --   关键流程2:认票
    5. 并非必须将所有的用户信息集中存储处理于单一的用户信息数据库。  --  非必要前提
    6. 多个应用系统中的不同账户统一映射集中于认证服务器。   --    技术实现的关键前提
 
  设计开发这个Demo的基本原则:花最小的改造代价实现新、老web信息业务系统融入到SSO大系统中,成为SSO大系统下的各种大、小B/S业务子系统、子站点的聚合,用户使用SSO大系统里的各项web业务子系统功能时,只需登录认证成功一次,就可以在SSO大系统下的子系统间,无缝跳转、自由切换游弋。做到改造代价最小、安全、高效、便捷、易使用、易扩展。
 
  如果面对的业务场景是这样的,某组织或者集团先后上马投入运营了不同公司采用不同技术(本文狭义上指:asp、asp.net、PHP、JSP)开发的各样B/S的业务信息系统,每个系统有自己的用户登录模块和权限分配管理控制模型,后来又准备上马的新业务系统打算集中用户与权限控制管理于统一的数据库,当然仍可以各自为政,各搞各的用户与权限管理。如果有条件对各个业务信息系统做小许的变动(代码级的调整变动)以实现SSO,本文案例Demo可以提供一些参考。
  
 
 
Demo文件目录结构如下:
  • SSODemo
  1. DB(SQLServer数据库备份)
    1. SSOServerDemo.bak   -- 认证服务器演示数据库:用户表、UserID映射表、账户登录记录表
    2. testSSOSite1.bak        -- 站点1的演示数据库:用户表
    3. testSSOSite2.bak        -- 站点2的演示数据库:用户表
  2. SSOServerDemo(统一认证服务器)
    1. Login.aspx                  -- 认证服务器,集中统一登录界面,站点New跳转此,使用此界面登录
    2. UserMapping.aspx       -- 将站点1、2、New的账号统一映射,成功后存入SSOServer数据库UserID映射表
    3. addNewSiteUser.aspx  -- 将后续新站点的新账号加入统一映射,成功后存入SSOServer数据库UserID映射表
    4. InvalidUserId.aspx      -- 失效某站点中的某账号
    5. authorizationCookie.aspx -- 发放统一认证票据
    6. httpGetCookie.aspx         -- 获取SSOServer域下的认证Cookie票据
    7. pollingSession.aspx         -- 刷新Session会话
    8. pollingSession.asmx        -- 刷新在线用户状态数据
    9. abandonSession.aspx      -- 更新在线用户会话状态表记录,删除会话票据
    10. GetUserIdByRecordID.aspx -- 验证票据,成功后,返回站点用户对应的UserID
    11. checkUserID.asmx -- 验证UserID是否被篡改过
    12. SSOSitesXML.config -- SSO中各个站点的IP及端口配置
  3. testSSOApplication1(代表旧有的B/S信息系统1)
    1. login.aspx
    2. PageBase.cs
    3. verifyUser.asmx  -- 验证用户名、密码通过后,返回该账号对应UserID
    4. pollingSession.ashx -- 刷新用户会话状态
    5. GetCookie.aspx -- 跨域取Cookie票据,送往SSOServer,验证通过后,返回用户在该站点的UserID,产生Session["userId"]
    6. abandonSession.aspx -- 删除Cookie票据和Session
    7. ClearSession.aspx -- 清除Session
    8. getEncryptPWD.aspx -- 获取某账号在该站点对应的加密后的密码字符串内容
    9. getSSOServerIP.ashx -- 获取SSOServerIP
    10. getRemoteCookie.js、pollingSession.js、abandonSession.js -- 相关的关键JS文件
  4. testSSOApplication2(代表旧有的B/S信息系统2)
    1. login.aspx
    2. PageBase.cs
    3. verifyUser.asmx
    4. pollingSession.ashx
    5. GetCookie.aspx
    6. abandonSession.aspx
    7. ClearSession.aspx
    8. getEncryptPWD.aspx
    9. getSSOServerIP.ashx
    10. getRemoteCookie.js、pollingSession.js、abandonSession.js
  5. testSSOApplicationNew(代表新上的B/S信息系统New)
    1. PageBase.cs
    2. pollingSession.ashx
    3. GetCookie.aspx
    4. abandonSession.aspx
    5. ClearSession.aspx
    6. getSSOServerIP.ashx
    7. getRemoteCookie.js、pollingSession.js、abandonSession.js
  
 
  测试前的先期工作,首先到SSOServer的UserMapping.aspx页面,建立各站点账号的统一映射。本Demo中,Site1为账号:site1 密码:site1,Site2为账号:site2 密码:site2,SiteNew为账号:siteNew 密码:siteNew。若有新站点新账号加入SSO,请到SSOServer的addNewSiteUser.aspx选择相应站点加入新账号进行映射。SSOServerDemo.bak的UserID映射表已存在测试账号的映射记录,各位看官测试时,不必再次映射。 
 
  注意:测试前请先修改站点的IP配置,各个站点项目中都静态引用了一些web服务,请配置好各个站点的IP及端口后,在VS中更新引用这些web服务。各个站点的IP配置信息在SSOSitesXML.config、appSettings.config、Web.config这几个文件中。
  
  
  
 
  对于Site1Site2的流程如下:
    PageBase.cs会检查 IF Session["userId"] == null,Redirect至GetCookie.aspx,JS跨域请求SSOServer下的httpGetCookie.aspx 获取Cookie认证票据内容,GetCookie.aspx服务器端代码 IF 发现获取的Cookie字符串内容为空,跳转至login.aspx。IF 获取的Cookie字符串内容不为空,将Cookie票据字符串内容发送至SSOServer WEB服务GetUserIdByRecordID.asmx,验证票据成功后,Web服务返回UserID,产生Session["userId"] = userID,根据UserID在该站点数据库中取得该用户在该站点的权限列表集合。
  
    若跳至login.aspx,根据用户输入的用户名、密码,查询该站点的用户数据库,验证通过后,产生Session["userId"] = userId,根据UserID在该站点数据库中取得该用户在该站点的权限列表集合。同时Respons.Write JS脚本至客户端,脚本发起请求SSOServer的authorizationCookie.aspx发放统一认证票据。
 
  对于SiteNew的流程如下:

    PageBase.cs会检查 IF Session["userId"] == null,Redirect至GetCookie.aspx,JS跨域请求SSOServer下的httpGetCookie.aspx 获取Cookie认证票据内容,GetCookie.aspx服务器端代码 IF 发现获取的Cookie字符串内容为空,跳转至SSOServer下login.aspx。IF 获取的Cookie字符串内容不为空,将Cookie票据字符串内容发送至SSOServer WEB服务GetUserIdByRecordID.asmx,验证票据成功后,Web服务返回UserID,产生Session["userId"] = userID,根据UserID取得该用户在该站点的权限列表集合。
  
    若跳至SSOServer下login.aspx,根据用户输入的用户名、密码,查询SSOServer的用户数据库,验证通过后,产生Session["userId"] = userId,根据UserID取得该用户在该站点的权限列表集合。同时Respons.Write JS脚本至客户端,脚本发起请求SSOServer下的authorizationCookie.aspx发放统一认证票据。
 
至于详细细节实现,代码都很简单。请列位看倌,下载Demo代码后,自己翻阅查看 ... ...
 
 
问题一:如何做到B/S、C/S系统的混合型信息业务系统的单点登录、统一认证?
 
问题二:如何做到SSO大系统下的B/S、C/S信息业务子系统不做任何代码级修改或者架构设计上的改造而实现问题一?
请网友们各抒己见,提供参考意见和思路、提示 ... ...
如果有什么请联系我,QQ:908460320。

也谈SSO,一个简单实用的单点登录Demo的更多相关文章

  1. SSO 基于Cookie+fliter实现单点登录(SSO):工作原理

    SSO的概念: 单点登录SSO(Single Sign-On)是身份管理中的一部分. SSO的一种较为通俗的定义是:SSO是指訪问同一server不同应用中的受保护资源的同一用户,仅仅须要登录一次,即 ...

  2. jmeter压力测试的简单实例+badboy脚本录制(一个简单的网页用户登录测试的结果)

    JMeter的安装:在网上下载,在下载后的zip解压后,在bin目录下找到JMeter.bat文件,双击就可以运行JMeter. http://jmeter.apache.org/ 在使用jmeter ...

  3. 如何使用AEditor制作一个简单的H5交互页demo

    转载自:http://www.alloyteam.com/2015/06/h5-jiao-hu-ye-bian-ji-qi-aeditor-jie-shao/ 本教程演示如何使用AEditor制作一个 ...

  4. 一个简单的MariaDB认证插件demo

    代码地址如下:http://www.demodashi.com/demo/13076.html 一.前言 众所周知(其实可能很多人不知道)MariaDB支持插件认证.在MariaDB中新建用户,常见的 ...

  5. LogCook 一个简单实用的Android日志管理工具

    众所周知,日志的管理是软件系统很重要的一部分,千万不可忽略其重要性.完整的日志将会在系统维护中起着异常重要的作用,就好像磨刀不误砍柴工一样,日志就像对系统进行分析的工具,工具便捷了,对系统分析起来就能 ...

  6. SSO 基于Cookie+fliter实现单点登录 实例解析(一)

    接上文,SSO的理论讲解,接下来实践实践! 1.使用Cookie解决单点登录 技术点: 1.设置Cookie的路径为setPath("/").即Tomcat的目录下都有效 2.设置 ...

  7. 统一门户与业务系统的sso整合技术方案(单点登录)

    一.单点登录(SSO,Single Sign On)整合目前计划接入统一门户的所有业务系统均为基于JavaEE技术的B/S架构系统.由于统一门户的单点登录技术选用的是JA-SIG组织开发的Cas Se ...

  8. 一个简单的IM系统(Demo附源码)-- ESFramework 4.0 快速上手(08)

    前面的文章已经介绍完了基于ESFramework/ESPlus进行二次开发的所有要点,现在,我们可以开始小试牛刀了. 本文将介绍使用ESFramework的Rapid引擎开发的两个最简单的Demo,E ...

  9. 简单实现Shiro单点登录(自定义Token令牌)

    1. MVC Controller 映射 sso 方法. /** * 单点登录(如已经登录,则直接跳转) * @param userCode 登录用户编码 * @param token 登录令牌,令牌 ...

随机推荐

  1. linux 2.6 互斥锁的实现-源码分析

    http://blog.csdn.net/tq02h2a/article/details/4317211 看了看linux 2.6 kernel的源码,下面结合代码来分析一下在X86体系结构下,互斥锁 ...

  2. ArcGIS学习记录—dbf shp shx sbn sbx mdb adf等类型的文件的解释

    原文地址: ArcGIS问题:dbf shp shx sbn sbx mdb adf等类型的文件的解释 - Silent Dawn的日志 - 网易博客 http://gisman.blog.163.c ...

  3. Android安全问题 静音拍照与被拍

    之前写过一些android手机root之后的安全问题的(文章列表见末尾),其实我是想到哪就写到了,今天整理硬盘,发现一年之前写过一段代码,所以今天我们就一起来讨论一下. 注:这里不是讨论多nb的技术, ...

  4. Use powerful plugins in your vim.

    # setup by root wget http://prdownloads.sourceforge.net/ctags/ctags-5.8.tar.gz tar -xzvf ctags-5.8.t ...

  5. C#反射机制介绍

    反射的定义:审查元数据并收集关于它的类型信息的能力.元数据(编译以后的最基本数据单元)就是一大堆的表,当编译程序集或者模块时,编译器会创建一个类定义表,一个字段定义表,和一个方法定义表等.       ...

  6. ubuntu12.04 make xconfig出错解决

    xconfig是linux下X Window环境中用于配制的一个工具,和menuconfig相似,但用法更友好方便,用如下命令可以进入配制界面: make xconfig 因为在ubuntu系统中,编 ...

  7. 【HDOJ】4579 Random Walk

    1. 题目描述一个人沿着一条长度为n个链行走,给出了每秒钟由i到j的概率($i,j \in [1,n]$).求从1开始走到n个时间的期望. 2. 基本思路显然是个DP.公式推导也相当容易.不妨设$dp ...

  8. freemarker截取字符串

    [#if   a.title?length   lt   23   ]   ${a.title} [#else]${a.title[0..22]}...[/#if]

  9. nginx.conf配置

    在此记录下Nginx服务器nginx.conf的配置文件说明, 部分注释收集与网络. #运行用户 user www-data; #启动进程,通常设置成和cpu的数量相等 worker_processe ...

  10. Hibernate4.x之Session

    Hibernate Session概述 Session接口是Hibernate向应用程序提供的操纵数据库的最主要的接口,它提供了基本的保存.更新.删除和加载Java对象的方法. Session具有一个 ...