实现单点登录的思路

前段时间给xx旅游委做了一个综合业务管理平台的项目,项目被分割成了n多个独立模块。要求每个模块需要提供单独的登录、退出以及各自的数据库和页面等,而整合这些应用的是一款叫做dzz的php版的桌面系统,类似于webqq。每个模块要在桌面系统中以图标的方式进行显示。所以一般我们叫这些模块为应用。

正题来了,我们开发小组有php、java2组4个人(移动端的未计算在内),php和java开发人员每个人都分配了5-10个应用的任务,还有一些系统自带的应用。最后整合的时候,就需要考虑单点登录的问题了,总不能每点个图标就让用户登录一次吧。

其实本来是想使用cas来完成单点登录的,但是pm说php那边对cas不了解,需要花费时间去了解,还不能保证整出来。另外还需要为cas跑一个服务,太麻烦了。结果只能自己来实现了。

我的想法是在用户登录的时候,对所有需要登录的应用发送登录请求,然后再记录每个应用的登录结果反馈后,跳转到桌面系统的桌面上,这个桌面只加载需要登录的应用。这种在登录的时候发送多个请求的方式,在CSDN、淘宝与天猫都使用过。当时CSDN原先的登录页面是用iframe嵌套在页面上的一个表单,而提交的网址就是现在的登录页面。点击登录后,用浏览器的开发者工具你会发现csdn自动会给blog.csdn.net、write.blog.csdn.net等发送login请求。淘宝和天猫也是在登录登录的时候会发送多个登录请求。至少在半年前还是这种方式呢,不过现在好像都改了(或者说现在变隐秘了,没有被我发现)。

基本思路定了,经过几次的详细的讨论,最终敲定了下面这个解决方案:

上图是我们设计的单点登录的逻辑图。我们这里差不多所有的应用都是“托管型应用”。所谓“托管型应用”,就是自身没有用户信息表,用户信息要从UC(用户中心,User Center)应用中获取。所以单点登录主要是为这些托管型的应用来服务的。详细步骤如下:

①. 从统一登录入口登录,用户输入用户名、密码,点击“登录”按钮,然后程序会以ajax+jsonp方式发送name+pwd到UC。

②. UC接收到请求以后,首先验证用户身份,对于通过验证的用户,UC会判断用户的权限,并以jsonp格式返回拥有授权的应用列表信息。每个列表项的信息是app_id+login_url。

③. 登录入口在ajax的回调函数中,获取UC反馈的应用列表信息,对这些应用发送ajax+jsonp登录请求:

name+pwd+app_id。

④. 各应用接收到登录申请后,由于是托管型应用,所以需要从UC中获取数据。使用java代码用java.net.URL模拟浏览器向UC发送用户权限验证:name+pwd+app_id。

⑤. UC再次验证用户身份,并验证用户权限,验证通过,则返回jsonp格式的用户详细信息。

⑥. 各应用保存用户信息到各自的session,并给登录入口反馈登录结果。

⑦. 登录入口获取各个应用的登录反馈后,将未登录成功的子系统记录下载,然后跳转到桌面上。

实现思路就是这样了,主要是在登录页为每个应用登录。当然这样做肯定会引起一些博友的批评。客观的来评价一下吧:

优点

最大的优点就是简单,绿色。让人一看就能明白。因为都是自己写的代码,哪出了问题,可以很快的定位。不会像现成的框架,如果只会用却不了解,出了问题就百、谷,找不到就两眼一抹黑了。

缺点

最大的缺点就是不安全,把每个应用的真实的登录地址都呈现出来了。而且在应用特别多的时候,性能就会很受影响。

好了,单点登录的思路就介绍到这里,欢迎大家批评指正。

时间: 2024-08-01 22:47:20

实现单点登录的思路的相关文章

B/S系统间跨域单点登录设计思路

基于B/S系统间单点登录 此处说的单点登录的概念,即不同系统公用一个登录界面.一处系统通过登录验证,在接入的各系统均为登录状态.一般有两种情景: 1)  一级域名相同 例如:tieba.baidu.com 和 www.baidu.com 这种情形的解决方案,非常简单.就是在统一登录页面登录成功以后,将用户的token(共享的session)信息存在cookie里,且cookie的作用域设为一级域名,例如设为baidu.com.这样同一个浏览器就实现了用户登录信息的共享. 2)  一级域名不相同

单点登录实现思路

2015/9/22 22:35:50 通常 我们使用单点登录的场景 是多个应用 需要共享用户的基础信息和登录状态2015/9/22 22:37:07多个应用 需要考虑到 这样几种情况 1. 同一主域名2. 跨域名 2015/9/22 22:41:17我会分析单点登录的使用场景 , 场景的特性 , 实现的方法 , 遇到的问题 , 2015/9/22 22:42:29用户在登录之后 , 我们会对他的登录状态进行记录2015/9/22 22:43:26采集基础信息 (如 浏览器 , ip 访问时间)

可跨域的单点登录(SSO)实现方案

可跨域的单点登录(SSO)实现方案 SSO简介 定义: 传统的单站点登录访问授权机制是:登录成功后将用户信息保存在session中,sessionId保存在cookie中,每次访问需要登录访问的资源(url)时判断当前session是否为空,为空的话跳转到登录界面登录,不为空的话允许访问. 单点登录是一种多站点共享登录访问授权机制,访问用户只需要在一个站点登录就可以访问其它站点需要登录访问的资源(url).用户在任意一个站点注销登录,则其它站点的登录状态也被注销.简而言之就是:一处登录,处处登录

可跨域的单点登录(SSO)实现方案【附.net代码】

SSO简介 定义: 传统的单站点登录访问授权机制是:登录成功后将用户信息保存在session中,sessionId保存在cookie中,每次访问需要登录访问的资源(url)时判断当前session是否为空,为空的话跳转到登录界面登录,不为空的话允许访问. 单点登录是一种多站点共享登录访问授权机制,访问用户只需要在一个站点登录就可以访问其它站点需要登录访问的资源(url).用户在任意一个站点注销登录,则其它站点的登录状态也被注销.简而言之就是:一处登录,处处登录.一处注销,处处注销. 应用场景:

单点登录系统(SSO)的开发思路

单点登录并不是一个新鲜的玩意儿,比较官方的解释是企业业务整合的解决方案之一,通俗来讲SSO就是一个通用的用户中心,国内比较流行的UCenter就是一套单点登录解决方案.而近期以CSDN明文存储用户密码并泄露用户信息开始的各大网站争先恐后的泄露自己的用户数据库除了暴露了这些网站的良心和智商外,如何设计用户中心已成为架构师们的热点话题之一.在最近一两年的项目经验中有幸接触到各种平台的单点登录系统的开发,所以借此机会总结下B/S架构的单点登录系统的开发经验. 单点登录系统的类别 就目前比较流行的应用来

多平台的网站实现单点登录系统(SSO)的开发思路 让你的会员中心更加统一(参考资料)

单点登录并不是一个新鲜的玩意儿,比较官方的解释是企业业务整合的解决方案之一,通俗来讲SSO就是一个通用的用户中心,国内比较流行的UCenter就是一套单点登录解决方案.而近期以CSDN明文存储用户密码并泄露用户信息开始的各大网站争先恐后的泄露自己的用户数据库除了暴露了这些网站的良心和智商外,如何设计用户中心已成为架构师们的热点话题之一.在最近一两年的项目经验中有幸接触到各种平台的单点登录系统的开发,所以借此机会总结下B/S架构的单点登录系统的开发经验. 单点登录系统的类别 就目前比较流行的应用来

单点登录认证方案思路,求好思路回复

统一用户认证方案思路 实现目标: 1.实现单点登录,使用单点登录帐号登录后,可访问多个被授权的系统. 2.尽量不让用户进行客户端安装,有些技术如CAS,SAML,P3P欢迎点评 免登录访问方式可能存在:  1.当前系统界面连接其他系统的界面,(场景:多系统集成一个系统)  2.当前系统访问其他系统的有验证的服务接口, (场景: 访问被授权的系统的服务)  3.在新的浏览器标签页直接打开其他系统的页面 .(场景: 进入其他系统免登录) 2.增强安全验证性,采用 cookie,token,sessi

SSO单点登录思路

SSO (Single Sign On) 什么是单点登录: 在大型的互联网公司中会有多个系统, 多个项目, 虽然这些项目都属于同一家公司, 但是项目本身其实都是独立的, 那多个系统可不可以实现共享同一份用户认证数据呢? SSO单点登录就是做这件事, 各个项目之间彼此相互信任, 在其中任意一个系统中进行登录, 用户的认证信息会被缓存在用户本地, 当用户去访问其他站点时, 可以复用这份认证信息,而免去了重新登录的麻烦, 提高用户体验感 xxl单点登录实现的逻辑 其实市面上的SSO框架还是挺多的, x

SSO单点登录PHP简单版

前面做了一个新项目,需要用户资源可以需要共享.由于之前没有做过这样的东西,回家之后,立马网站百度"单点登录".帖子很多,甄别之后,这里列几篇认为比较有营养. http://blog.csdn.net/ghsau/article/details/20545513,http://blog.sina.com.cn/s/blog_5f66526e0102vf43.html 如果要解决两个网站之间的同步登录(单点登录)问题,首先来看看一个网站的登录问题. 很多人知道一个网站的登录问题,PHP不就