实现单点登录的思路

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

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

其实本来我是想使用cas来完成单点登录的,但是pm说php那边可能对这个不了解,而且还需要为cas跑一个服务,太麻烦了。结果我们就只能自己来实现了。经过n次的讨论,最终敲定了下面这个解决方案:

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

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

②. UC接收到请求以后,首先验证用户身份,对于通过验证的用户,UC,返回已授权的应用列表信息:app_id+login_url

③ 登录入口获取用户中心反馈的信息,对这些应用发送ajax登录请求:

name+pwd+app_id

④ 各应用接收到登录申请后,通过java.net.URL的方式向用户中心发送用户权限验证:name+pwd+app_id

⑤ 用户中心再次验证用户身份,并验证用户权限,验证通过,则返回用户的详细信息

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

⑦ 登录入口获取各个应用的登录反馈后,将未成功的子系统写入日志中,然后跳转到桌面上

实现单点登录的思路

猜你喜欢

转载自a453228609.iteye.com/blog/2162788