一种SSO和权限管理方案
本单点登录借鉴了著名的OFBIZ和MS Passport的SSO原理。主要是为了方便和权限管理集成。
一般来说,对于一个大型的企业信息系,认证和授权要考虑一下几个问题:
1、 门户的子系统单点登录
2、 门户子系统的分散授权还是集中授权
3、 门户子系统是否是同构或异构,如ASP、JSP、PHP等
4、 该门户是否B/S和C/S并存
5、 遗留系统的用户账号是分散,还是统一管理。不过一般遗留系统都有几套用户账号,然后当子系统增加时,为了把所有子系统集成,就要考虑门户的问题。
6、 和遗留系统相对应的,就是一个企业要新开发好几个子系统,让它们集成到一起
本方案也只能解决其中的一部分问题
概念:
SSOServer:(浅绿色)负责登入和登出服务,它和application不在同一个application Server上。
appA:某个Application Server上的application
appB:另一个Application Server上的application
checkLogin:SSOServer上的一个登录判断和登录入口
login:SSOServer上的登录入口
logout:SSOServer上的登出入口
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 请求,appA的filter检查该用户Session,发现他还没有登录,保存其目标url信息于新创建的Session中,重定向到https://SSOServer/checkLogin
2、 checkLogin调用login页面进行登录,用户输入用户名、密码进行登录,处理完毕,生成一个ticket,将该ticket和username保存于SSO 数据库中,同时设置lock为0。然后在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 时,appB的filter发现该用户没有在其系统中登录(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,可以支持JSP、ASP、PHP等异构系统,不过用Servlet规范的filter容易处理。
6、 本方案暂时忽略了遗留系统导致的有几套账号的问题,而是采用统一账号管理。