单点登录(SSO)的实现—通行证的基本原理
问题起源:想做一个面向校园的网站,因为势单力薄。部分模块采用整合其它开源系统的方案,比如BBS系统和BLOG系统。首先面临的就是用户身份认证的方式。由于这些不是自己开发的系统,都分别有自己的用户系统,于是面临统一身份认证的过程。
以前看过企业级的Web service方案,主要是通过XML,SOAP,WSDL和UDDI来实现。将应用服务都注册到UDDI服务器中,通过SOAP协议使用XML传递信息(当然需经过加密)。由于涉及到很多服务部署的问题,用JAVA来做这样的项目肯定是再好不过的了。我的目的只是几个WEB系统的整合,肯定是要排除这么伟大的方案了。关于Web service有兴趣的朋友可以参考机械工业出版社出版的《Web Servides原理与研发实践》,里面有详细的介绍。
那么对于这样的小WEB系统的整合该怎么来实现?我们假设这是个从零开始的项目,除了自己开发的系统外,还要用到一些其它组织开发的开源系统:比如BLOG,CMS,BBS。这些系统都有各自的用户系统。要把他们整合到一块有个原则,就是尽量不要破坏或者修改这些系统。那么要实现统一身份认证,我们必须要有一个用户信息库,然后吧这个数据库的信息映射到那些子系统的数据库中,在大型项目中,一般都会独立出一台单独的用户信息服务器,大部分高校采用LDAP来存放用户信息,因为采用的是树状结构,对经常读取但很少修改的数据而言,它的性能是很高的。
LDAP用户库和各子系统用户库的映射有很多种方法,我这里只用最简单的直接映射,也就是帐号和密码都是相同的。
假设我的域名部署如下
http://news.domain.com 这是CMS系统的域名
http://bbs.domain.com 这是论坛的域名
http://blog.domain.com 这是博客域名
http://reg.domain.com 这是统一注册和登录页面的域名
首先是注册,我们让所有子系统注册页面都转向到一个注册页面上来(各种脚本语言都有转向函数),比如说当用户希望在http://blog.domain.com/reg.php注册是,reg.php把这个请求转向到http://reg.domain.com/reg.php.
在实现注册时,由于刚开始时候子系统并不多,注册时把用户注册信息写入主用户数据库的同时写入各子系统的用户库。以后若有新的子系统加入进来时可以通过帐号激活的方式来实现新系统的帐号激活。
用户登录的过程,可以参考如下来自IBM的图片
流程描述如下:(仅描述正常流程)
1. 用户使用在统一认证服务注册的用户名和密码(也可能是其他的授权信息,比如数字签名等)登陆统一认证服务;
2. 统一认证服务创建了一个会话,同时将与该会话关联的访问认证令牌返回给用户;
3. 用户使用这个访问认证令牌访问某个支持统一身份认证服务的应用系统;
4. 该应用系统将访问认证令牌传入统一身份认证服务,认证访问认证令牌的有效性;
5. 统一身份认证服务确认认证令牌的有效性;
6. 应用系统接收访问,并返回访问结果,如果需要提高访问效率的话,应用系统可选择返回其自身的认证令牌已使得用户之后可以使用这个私有令牌持续访问。
上面所说的令牌我在WEB引用中可以用COOKIE或者SEESION来实现。
例如通过COOKIE来实现
1.用户在统一登录页登陆,通过查询主用户数据库判断用户是否合法,若是,则注册该用户的唯一COOKIE标识(可以通过加密用户名和密码得到,网上有很多算法)。
2.用户进入某子系统时,先判断COOKIE是否注册,若注册了,则解密该COOKIE得到用户名和帐号,并判断合法性。
3.如果合法,则立刻在该子系统中注册(可在原子系统的登录脚本种抽出登录的部分做成一个函数)
使用COOKIE的优点就是简单,只要设置一下就可以实现COOKIE的跨子域传递
例如
setcookie(NC_USER_COOKIE, 用户名, 失效时间, 作用路径, ‘.domain.com’);
就能实现在所有.domain.com子域下的传递。
但COOKIE也有他的缺点,首先就是安全级别不高,要提防COOKIE劫持的威胁,其次就是它只能跨子域传递,而不能跨完全不同的域。比如说domain.com和fuck.com之间就不能传递。
然后再说下SESSION的方式,由于SESSION是存储在服务器端的,所以安全级别肯定要比COOKIE的级别高。但是由于SEESION存储的位置不同,造成了无法跨域传递。可以通过把SEESION村入数据库来解决这个问题。
由于PHP的SESSION需要用到标识SESSION的COOKIE,所以需要设置下COOKIE的作用域
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/sdts/archive/2007/10/30/1856699.aspx
单点登录(SSO)的实现—通行证的基本原理相关推荐
- 单点登录(SSO)的实现---通行证的基本原理
PHPChina 开源社区门户%AD5EN {v PHPChina 开源社区门户�/-//kU+CW2i$N 问题起源:想做一个中型的网站,因为势单力薄.部分模块采用整合其它开源系统的方案,比如BBS ...
- 什么是单点登录(SSO)?单点登录(SSO)到底什么意思?【附逻辑Demo实例】
在程序开发中,特别是网站类开发,会接触到单点登录(SSO),什么是单点登录?,单点登录(SSO)有什么用?下面软币网小编来来介绍一下: 一.什么是单点登录? 单点登录的英文名叫做:Single Sig ...
- 基于.Net的单点登录(SSO)解决方案
基于.Net的单点登录(SSO)解决方案 前些天一位朋友要我帮忙做一单点登录,其实这个概念早已耳熟能详,但实际应用很少,难得最近轻闲,于是决定通过本文来详细描述一个SSO解决方案,希望对大家有所帮助. ...
- PHP多台服务实现单点登录,如何在多台服务器上共享Session(PHP/JSP/ASP.NET)以及单点登录(SSO)...
如何在多台服务器上共享Session(PHP/JSP/ASP.NET)以及单点登录(SSO) Apache Session复制: 使用Memcached来共享PHP Session: 使用Cohere ...
- jwt单点登录_单点登录SSO技术选型
一些人存在的意义总归是让另一些人成长,然后消失. --刘同<谁的青春不迷茫> 1.单点登录是什么? 单点登录主要用于多系统集成,即在多个系统中,用户只需要到一个中央服务器登录一次即可访问这 ...
- OAuth2 实现单点登录 SSO
转载自 OAuth2 实现单点登录 SSO 1. 前言 技术这东西吧,看别人写的好像很简单似的,到自己去写的时候就各种问题,"一看就会,一做就错".网上关于实现SSO的文章一大堆 ...
- 基于云端的通用权限管理系统,SAAS服务,基于SAAS的权限管理,基于SAAS的单点登录SSO,企业单点登录,企业系统监控,企业授权认证中心...
基于云端的通用权限管理系统 SAAS服务 基于SAAS的权限管理 基于SAAS的单点登录SSO 基于.Net的SSO,单点登录系统,提供SAAS服务 基于Extjs 4.2 的企业信息管理系统 基于E ...
- 安全单点登录(SSO)解决方案
随着企业大量采用云应用程序,最终用户不得不在一天中处理越来越多的密码,只是为了完成他们的工作.为了进行有效的用户身份管理,您需要采用一种有效且安全的方法来管理用户;密码.ADSelfService P ...
- CAS解决单点登录SSO
关于CAS很多的原理和基础的配置启动,网上是很多的,我更多是结合我的实践和心得.需要了解CAS的原理,认证协议,认证流程,可以参考以下文章. 让CAS支持客户端自定义登陆页面--客户端篇 CAS原理与 ...
- 多域单点登录SSO系统的实现
多域单点登录SSO系统的实现 天幻网新的规划中,将涉及到多域,如FFSKY.COM,FFSKY.CN等等,因此网上某些对同一域靠设置COOKIE的DOMAIN=".FFSKY.COM&quo ...
最新文章
- PCL使用RANSAC拟合三位平面
- Canvas3 汉化QA和BUG反馈
- 皮一皮:皇上,他在下毒!
- mysql 批量drop_MySql批量drop table
- CentOS 6.9/7通过yum安装指定版本的MySQL
- ASP.NET页面的生命周期(转载)
- springboot - 整合多数据源配置
- mysql查询当前用户中所有的表空间_查看Oracle当前用户下的信息(用户,表视图,索引,表空间,同义词等)...
- html 生成条形码,在Javascript中优雅的生成条形码——Jsbarcode
- 小米手机android9换字体,教你免费修改小米手机字体
- python实现word批量转pdf
- JavaScript下载后端返回的文件流
- 小王的智能箱子,看完泪目
- 基于uni-app手机端后台管理系统uni-uadmin
- MySQL 从 5.7 到 8.0
- 鲁宾逊微积分教材版权的“知识共享”授权方式
- PDF文件页面如何提取
- SVG基本使用(三、剪裁/蒙版、渐变色、画笔、形变、ViewBox)
- 【转载】男性穿衣常识
- 《中国古代文学III(元明清)》