zoukankan      html  css  js  c++  java
  • 实现单点登录的思路

           前段时间给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)应用中获取。所以单点登录主要是为这些托管型的应用来服务的。

    具体过程例如以下:



           ①. 从统一登录入口登录,用户输入username、password,点击“登录”button,然后程序会以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,并给登录入口反馈登录结果。

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



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

    客观的来评价一下吧:


           长处
           最大的长处就是简单,绿色。

    让人一看就能明确。

    由于都是自己写的代码。哪出了问题。能够非常快的定位。

    不会像现成的框架,假设仅仅会用却不了解,出了问题就百、谷。找不到就两眼一抹黑了。


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

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


  • 相关阅读:
    [codevs]失恋28天题目系列
    [NOIP1998]最大数
    [codevs4247]奇特的生物
    [codevs1380]没有上司的舞会
    [codevs2152]滑雪
    [codevs2171]棋盘覆盖
    [codevs2170]悠闲的漫步
    [codevs1557]热浪
    [codevs1554]最佳课题选择
    nodejs建站+github page 建站问题总结
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/5351681.html
Copyright © 2011-2022 走看看