一种SSO和权限管理方案

一种SSO和权限管理方案

 

本单点登录借鉴了著名的OFBIZMS PassportSSO原理。主要是为了方便和权限管理集成。

一般来说,对于一个大型的企业信息系,认证和授权要考虑一下几个问题:

1、          门户的子系统单点登录

2、          门户子系统的分散授权还是集中授权

3、          门户子系统是否是同构或异构,如ASPJSPPHP

4、          该门户是否B/SC/S并存

5、          遗留系统的用户账号是分散,还是统一管理。不过一般遗留系统都有几套用户账号,然后当子系统增加时,为了把所有子系统集成,就要考虑门户的问题。

6、          和遗留系统相对应的,就是一个企业要新开发好几个子系统,让它们集成到一起

 

本方案也只能解决其中的一部分问题

 

概念:

SSOServer:(浅绿色)负责登入和登出服务,它和application不在同一个application Server上。

appA:某个Application Server上的application

appB:另一个Application Server上的application

checkLoginSSOServer上的一个登录判断和登录入口

loginSSOServer上的登录入口

logoutSSOServer上的登出入口

autoLogin:(浅黄色框)某个Application上的用户第一次请求入口,它是每个web application的权限初始化模块,在这里处理用户信息获取,权限分配等,它由每个application实现,但有一定的规范。如果说SSOServer处理Authentication,那么它就是处理Authorization

filter:(浅蓝色框)某个application的前端拦截器,主要是拦截客户端URL请求,判断他是否为已认证和已授权用户。它由SSOServer统一实现,各application只需按要求部署即可。

ticket:该用户在所有系统的惟一标识

uuid:和ticket类似,只不过用意不同,结合cookie,可以解决跨域的问题

lock用户在CAS中验证通过后设置为0,但在autoLogin处理完毕后设置为1。这主要是为了安全性考虑。黑客捕获ticket,即使得到该ticket,但lock设置为1后,autoLogin就不再处理该登录(相当于悲观锁)。

 

登录过程:

1、  客户端浏览器发起对http://appA.com/foo.jsp 请求,appAfilter检查该用户Session,发现他还没有登录,保存其目标url信息于新创建的Session中,重定向到https://SSOServer/checkLogin

2、  checkLogin调用login页面进行登录,用户输入用户名、密码进行登录,处理完毕,生成一个ticket,将该ticketusername保存于SSO 数据库中,同时设置lock0。然后在SSOServer上创建会话Cookie(该cookie保存于内存中,存在于浏览器会话期间,如Servlet规范里的JSESSIONID),在该cookie中保存该uuid,然后再重定向到http://appA.com/autoLogin?ticket=??? 其中ticket包括一个全局标识,如asdfsdFsdfsdfsdfsdfsdf345uyui

3、  autoLogin里根据ticket取得用户username,根据其username在数据库里取得用户权限信息等,将其保存于原先在filter里创建的session中,同时将lock设置为1(防止第二个有同样ticket的用户访问,保准安全性,)然后重定向到Session里的目标url这时便可顺利通过filter

4、当用户需要访问http://appB.com/bar.jsp 时,appBfilter发现该用户没有在其系统中登录(Session不存在),保存其目标url于新创建的Session中,重定向到https://SSOServer/checkLogin

5、  checkLogin根据当前浏览器的cookie,发现有uuid,从而判断该用户已经登录过,然后将该用户重定向到http://appB.com/autoLogin?ticket=??? ,然后重复3的步骤。

 

说明:

1、  对于每个用户登入的每个系统,用户只需要一次和SSOServer交互,并且,也只需要一次与autoLogin交互。

2、  如果用户第一次访问整个门户,可以从Login入口,而不是checkLogin,这可以允许Login页面的定制(如English网站Login入口)。

3、  引入lock,其实就是引入安全性。

4、  本方案暂时没有处理Logout,不过实现应该不是很难。

5、  本方案适用于Web application,可以支持JSPASPPHP等异构系统,不过用Servlet规范的filter容易处理。

6、  本方案暂时忽略了遗留系统导致的有几套账号的问题,而是采用统一账号管理。

你可能感兴趣的:(jsp,PHP,浏览器,SSO,asp)