
mikecat
迈克老猫
-
个人空间
- 组别:管理员
- 性别:
- 来自:中国-石家庄
- 积分:2235
- 帖子:1903
- 注册:
2007-12-31
|
针对分析单点登录(流程图与数据安全)提出的问题及解决方案
当时根据SSO的流程做下了个人分析,也得到不少园友的评论及帮助,可是觉的可惜的是,没有一位园友提出我画的流程图中存在的问题.这也可能是大家没有看明白我的图(本人不才). 当时自认为在流程上以及业务逻辑上都没有太大的问题,至到有次和朋友谈到了SSO,当时我非常自豪的说出了SSO的流程及思路,他也非常认可,可是他的一个问题把我难倒了.
他的问题是这样的:
如果用户A在联盟站点SiteA中通过了认证中心的认可.这样用户A的用户uid就会出现在认证中心中的线列表中.此时如果用户A重新打开一个联盟子站点SiteB,此时在联盟站点SiteB中如何确认这个用户的身份呢?按 理说这个用户A在联盟点SiteB中应该是登录状态. 为此再次贴出自己理解的SSO流程图,并在图上附上了困扰我的三个问题. 
按照SSO登录流程来看(个人理解):
首先: 判断本站点的Session["uid"]是否存在,如果本站点的会话状态存在则说明是登录状态. 问题:用session来管理子站点的会话状态,可以有效的减少子站与联盟站点的关联.但是当子站点的session过期后,此时的情况有可能是这样的,在子站点A中存在的Session没有过期,但子站点B中的Sesion正好过期,而用户又没有通过正常的退出操作,此时如何控制认证中心的在线列表呢?是存在还是不存在呢? 其次: 如果Session["uid"]不存在,则判断网页参数中是否有uid这个参数,如果有则通过uid到认证中心中判断这个uid是否在认证中心的在线列表中,如果有则说明此用户是登录状态.不知道这样理解是否正确. 如果是这样,那么问题是这样的: 如果用户A登录成功了,此时用户B知道用户A网页上的参数uid,他人为的在其它子站点中的页面中加入这人参数,此时应该也会是登录状态.如何解决这个问题呢?
还有一个问题就是我朋友提出的: 如果用户A在联盟站点SiteA中通过了认证中心的认可.这样用户A的用户uid就会出现在认证中心中的线列表中.此时如果用户A重新打开一个联盟子站点SiteB,此时在联盟站点SiteB中如何确认这个用户的身份呢?不同 站点的Session是不能共享的.(如何知道是用户A登录而不是用户B呢?)按理说这个用户A在联盟点SiteB中应该是登录状态.
本人分析: 1:新打开的联盟站点是肯定不存在Session的,因为站点间Session是不能共享的. 2:新打开的联盟站点是肯定不会存在用户的uid的. 此时根本不能判断用户是否已经在认证中心中登录过. 本文的焦点其实就在于联盟站点如何确认用户身份的问题.即如何确认用户的uid.
经过本人的假想:我的解决思路是这样的,不知道实际应用中是否可行。  用户A在站点SiteA中登录成功后,将用户的UID和用户IP以cookie的形式保存在客户端。当用户打开一个新的联盟子站点(例如SiteB)时,此时的判断用户状态的流程变成上图.一般用户的IP在一定时间内是唯一确定的,这样做应该可以保证用户身份的正确性与唯一性(个人是这样认为),不知道这样做是否正确.上面的流程图应该可以解决我在本文中的第一幅图中的三个问题。
金鳞岂是池中物,一遇风云便化龙

|