除cas外的另外一种单点登录的思路

 前段时间给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,并给登录入口反馈登录结果。

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

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值