Send As SMS

2005-12-31

Simple SSO framework

目前,我们的网站还没有一个很好的SSO的架构,但是SSO对于我们来说,却是非常紧迫的一个需求:不如说,我们迫切的希望我们的基于Java的WEB应用、基于ASP的WEB应用,能够共享会员的信息。

在环境而言,目前主要的是:IIS、Tomcat、Weblogic等。

此外,目前我们的很多的应用都是在应用层面上进行用户认证和权限管理的,并不是使用WEB容器的用户认证和权限管理的。在很长的时间之内,SSO对应用级别进行支持仍然是十分必要的。

Tomcat在内部实现了一个很简单的SSO框架,基于Cookie: JSESSIONIDSSO,在同一个Virtual Host内部,很简洁的就可以实现SSO。

如果不在 一个Virtual Host呢?我觉得也可以建立一个简单的SSO协议,大致的想法是:

1、设定一个 SSO 登陆的主服务器,在各个WEB应用需要登陆认证时,转移到这个SSO服务页面上(登陆完成后,自动返回)
2、SSO主服务器检查用户是否已经成功登陆,如果是的话,在返回信息中包括 SSOID,否则首先登陆,然后返回SSOID
3、其它的WEB应用将SSOID 作为Cookie保存到浏览器上,并在local session中保存SSOID 的相关信息(直接向SSO登陆主服务器发出请求)

主要的开发工作:
1、SSO 主认证服务器
  • checklogin.service -- 检查用户是否已经登陆,已登录,返回SSOID
  • login.service -- 向服务器发送登陆请求,登陆成功的话,返回SSOID
  • getUserInfo(ssoid) -- 服务器返回指定ssoid 的用户相关信息
2、基于AJAX的工作流程:
  1. 网站如果需要进行用户认证,跳转到 login.jsp 页面
  2. 在这个页面中,向 SSO 主认证服务器发送 checklogin.service 请求,如果已有SSOID,则设置SSOID Cookie,成功,跳至4
  3. checklogin 返回无 SSOID 的话,ajax在前端打开 SSO 主认证服务器提供的 Login 用户界面(可以嵌入到当前页面中)
    1. 用户输入登陆信息,提交 login.service
    2. SSO主认证服务器成功后,返回SSOID及基本客户信息
    3. AJAX根据返回结果设置Cookie
    4. 登陆完成
  4. WEB服务器根据Cookie中的SSOID向SSO主认证服务其请求 getUserInfo 获得用户的详细信息,保存在Local Session中。
优势:
1、在应用级别上的SSO不依赖于WEB服务器
2、采用AJAX的解决方案,可以最为简单的在服务器上进行SSO实现。

这里还只是一个初步的想法,详细地形式需要在实战中进行验证。

1 Comments:

At 12:26 上午, sarafisher7268 said...

I read over your blog, and i found it inquisitive, you may find My Blog interesting. My blog is just about my day to day life, as a park ranger. So please Click Here To Read My Blog

 

张贴评论

<< Home