单点登陆及设计时遇到的问题

一年多内,涉及到了两类的单点登陆系统。第一类的原意,是各模块可以相互独立,拥有(或者不拥有)相应的用户数据库。实际上用户状态是存在各模块里,在模块与数据库中不存在验证用户的数据层。各模块内部都需要建立webservice,并且需要引用想要跳转的模块的webservice。这样做的好处是各模块本身可以独立运作,但带来的问题是添加模块或者模块数量多的时候,引用的处理就会比较复杂,同时session的建立是由已登陆模块控制的,并不受目标模块的控制。

过程大约是这样的:A模块有登陆状态,当要跳转到B的时候,通过接口发送当前用户信息,如B模块查询到用户的时候,在B对应的数据库里建立记录和随机数,将随机数发回,A将这数加在B模块专门的页面连接的后边并打开相应连接。B模块通过随机数找到相应用户后,建立用户环境并删除随机数。

第二类是采用类似统一的中间验证组件的形式,有专门的一个application用来做这方面的验证。用户登陆是在该组件里进行登陆的,用户状态也存在这里面,当其他的application需要验证时,才与该application进行交互。这种模式也是相对较为通用的模式。

验证层部分的用户状态维护,用session是不行的,没有办法获取到。至于cookie,也要分不同的状况。最初的考虑是直接使用.net自带的用户验证方法,或者是用浏览器进程的cookie,但是这两种都无法获取到cookie值的。而如果设置一下cookie的时间,就能得到cookie了。

这里不得不提醒一个比较麻烦的问题:浏览器。我一直是用maxthon的,结果这个浏览器既自动使用同一个session又自动使用同一份cookie,于是无论session还是.net的验证票都能获取到,而使用IE是取不到的。所以测试的时候需要注意一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值