公司要用ASP.NET2.0开发一个新平台,用户要求与现在的Oblog中的所有用户同步。并且要实现单点登录,全站(有跨主域名的栏目)通用。这真的是非常郁闷的事情:
- 一个是ASP.NET、一个中ASP
- 两个主域名也不同
- 可能布置在不同服务器
- 以后扩展平台也将共用这个通行证。
想了好久,放弃了什么Session、Cookie的想法。但Session给我启发,另外想到了
Google的单点登录方式,特别是Blogger的登录,其环境与我现在所要处理的环境一样。于是一个伪Session的通行证想法就出现了。
之前我也想过,在单点登录时写入多个主域的Cookie,但想到,应该是其它平台使用通行证的接口,而不是让通行证来不断地兼容扩展的应用平台。好了,就简单说一下,如何实现这个简单而又实用的想法吧。
登录注册我想谁都可以处理,关键是如何做到同步。就像前面提到的那样,如何把Oblog的登录同步到现有的通行证中。
说起来很简单。就是:
- Oblog中的验证是否已登录。
- 如果没用登录,使用脚本转到通行证的验证页,如http://passport.xx.com/Check?url=http://www.xxx.com/loginIframe.asp
- 在http://passport.xx.com/Check验证当前用户是否登录,登录则在数据库中产生一条记录,包含:GUID,登录时间,登录IP,用户名。同时返回到http://www.xxx.com/loginIframe.asp?guid=GUID.失败则转到通行证的登录页,记得仍然要保存好最终要返回的页面。
- http://www.xxx.com/loginIframe.asp?guid=GUID中 查找与GUID关联的那条记录,如果IP,过期时间正确,则可以在Oblog中写入验证信息了。(这里的查找GUID记录,我是使用通行证提供的一个 WEB服务及ASP中的XMLHTTP完成的。WEB服务中,收到GUID,就开始查询符合要求的记录,返回一个用户名,如果返回为空,则为没有符合要求 的记录。)
主验证过程就是这样,使用URL传递本来Cookie要做的事,使用数据库完成本来Cookie与Session要完成的事。整个验证已经通过测试,并且验证过程放在Iframe中完成,用户几乎没有多少感觉。
在定下使用这个简漏的通行证方案之前,我也翻阅查找了好多资料。但都无法解决现在的问题。
如果您有更好的方案,忘赐教,不胜感激。