单点登录方案讨论

swordman123 2014-01-13 09:42:29
1、首先说下系统情况:
业务:公司做b2b平台,下面有供应,独立分销系统(自己域名)、采购用户类型。独立分销用的是一套系统(包括用户数据),但是它有自己独立的域名,看成不同的网站。另外还有几个相关的业务系统(与b2b平台不同的域名)。
物理:分南方、北方两个机房;有专线同步业务数据。
2:单点登录需求
系统之间登录一次,可以访问其他系统。中心网站(单点登录服务器)故障,先保证业务系统可以登录。
3:考虑的方案
a:通过登录后在中心网站创建token,然后将Token返回到应用系统A,在需要单点跳转的地方,将token带到url上,通过该url跳转B。跳转到B业务系统后,再根据token到中心网站验证,通过后即为登录。
缺点:url一直有效,在网吧或者局域网上容易被拦截。
b:做成京东,淘宝类似的。当第一次登录成功后,再异步通过 jsonp方式,跨域设置相关业务站点(顶级域名)的凭证信息保存在Cookie中,子域共享该Cookie。跳转的时候,通过浏览器自动获取到Cookie。
缺点:公司的顶级域名比较多(属于公司的有3-4个),还有上百的独立分销域名。请求各顶级域名本身就是件很耗时的事情。Cookie方式还有XSS和CSRF方面的安全性。

限于能力,个人对单点登录涉入不深。不知道各位有没有什么好的建议或者较为成熟的方案。请指教!


...全文
407 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
gzbhappy 2015-05-22
  • 打赏
  • 举报
回复
引用 2 楼 tsgx_1989 的回复:
方案A 可以做一些改进 1.A登录=>跳转到登录中心(登录中心将登录数据载入到一个缓存当中,设置缓存过期策略等),并给用户一个会话,保存用户信息 2.返回A,带上Token 3.A获取Token,向登录中心发出HttpWebRequest请求带上Token,进行验证 4.验证成功,A得到登录中心响应的用户数据,载入会话,登录成功 5.B使用登录中心验证登录,跳转到登录中心,此时登录中心已有登录会话(即第一步时被标记为已登录) 6.同2-4步骤
2.3情况 A得多刷新一次页面 影响页面性能
夜色镇歌 2014-01-13
  • 打赏
  • 举报
回复
关注
Wang-Yucai 2014-01-13
  • 打赏
  • 举报
回复
利用SSO站点作为COOKIE跳板。
Ahoo 2014-01-13
  • 打赏
  • 举报
回复
引用 7 楼 swordman123 的回复:
感谢 tsgx_1989的回复。 对4-5步骤还有些疑问: 1:如果是从一个顶级域名跳转到另一个顶级域名,登录中心怎么验证其会话?
你说的 俩个顶级域名是 2个子系统吧? 场景: A通过登录中心登录验证返回A A跳转到B,B跳转到登录中心,登录中心验证会话. 登录中心其实是共享了登录会话.
swordman123 2014-01-13
  • 打赏
  • 举报
回复
感谢 tsgx_1989的回复。 对4-5步骤还有些疑问: 1:如果是从一个顶级域名跳转到另一个顶级域名,登录中心怎么验证其会话?
Ahoo 2014-01-13
  • 打赏
  • 举报
回复
1.个人觉得每个APP之间是应该没有耦合的. 2.也就是说 A跳转到B不需要带上任何Token 3.每个子系统 都应该给出一个页面,用作跳转到登录中心,并带上自己的APPID 4.登录中心验证是否有会话,请记住,当第一次用户登录成功时保存会话,那么SessionId 已经保存在了浏览器Cookie当中作为一个Key. 5.那么当每个子系统再跳转到该登录中心时再去验证会话,如果有直接生产Token跳转到APPID对应的子系统 6.子系统在根据Token 去请求(HttpWebRequest)登录中心(登录中心有一个容器池用于保存每个Token,对应的已登录的用户信息) 7.子系统得到验证结果,以及用户信息,授权验证
Ahoo 2014-01-13
  • 打赏
  • 举报
回复

画的一个简单的UML序列图,仅供参考
Ahoo 2014-01-13
  • 打赏
  • 举报
回复
引用 3 楼 swordman123 的回复:
To tsgx_1989: 1:从A到B, 其跳转URL上也带有Token? 那是不是认为从A到B,其 URL及参数没有变化呢?
1.如果我来做我不会从A到B上也带Token,我会先跳转到B,然后B跳转到验证中心,或让用户选择使用登录中心验证 2.跳转到验证中心后,验证中心验证是否有登录会话保持着(上面的1步骤已经保存了会话) 3.如果有直接返回Token,给B 4.上次回复的 2到4步骤
swordman123 2014-01-13
  • 打赏
  • 举报
回复
To tsgx_1989: 1:从A到B, 其跳转URL上也带有Token? 那是不是认为从A到B,其 URL及参数没有变化呢?
Ahoo 2014-01-13
  • 打赏
  • 举报
回复
方案A 可以做一些改进 1.A登录=>跳转到登录中心(登录中心将登录数据载入到一个缓存当中,设置缓存过期策略等),并给用户一个会话,保存用户信息 2.返回A,带上Token 3.A获取Token,向登录中心发出HttpWebRequest请求带上Token,进行验证 4.验证成功,A得到登录中心响应的用户数据,载入会话,登录成功 5.B使用登录中心验证登录,跳转到登录中心,此时登录中心已有登录会话(即第一步时被标记为已登录) 6.同2-4步骤

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧