是否可能跨域共享Session信息或者怎么实现单点登录?

ynduanlian 2014-12-19 08:57:15
一个网站下挂接了多个模块,这些模块可能使用独立的二级域名,在不同的服务器上。怎么样能让用户只需登录一次,就能在访问这些模块时都是已登录的状态?
...全文
225 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
啾啾我 2014-12-20
  • 打赏
  • 举报
回复
我也感觉cookie可以实现你要的效果,你可以写一个公用的验证登录信息的方法,在abc页面都做判断,如果登录了就直接打开页面,如果没有登录就跳转到login页面。如果还担心安全问题的话,可以在验证方法中对cookie信息进行数据核实。
leoAAAA 2014-12-20
  • 打赏
  • 举报
回复
可以考虑用cache,大量的session比较适用,自己搜搜!
  • 打赏
  • 举报
回复
引用 9 楼 ynduanlian 的回复:
我想要实现的是: 打开浏览器访问ABC之一时,都需要输用户密码登录, 而如果已访问A或C,再访问B时就不用用户再次输用户密码登录
你可以想一下,当导航用户界面到 login 这一个页面时,它“什么登录信息都知道”,它自己作逻辑判断是否给根据A或者C的授权而直接给B授权。只要它重新把用户界面导航回 B 网站的页面时,它所附加的新的 sso 授权编码(这个编码通常在几十秒钟后就作废)能够让 B 网站作为凭据就行了。
  • 打赏
  • 举报
回复
引用 10 楼 ynduanlian 的回复:
首先判断本站点是否已登录,未登录的话向主站点发起请求确认在主站点上是否有对应账号登录,如果有,返回令牌,当前系统通过令牌向主站点发起登录请求(这一步无需账号密码),最终实现登录 ------------------------------------------------------ 这个令牌如何最简单的传递呢?
根据不同的系统有不同的设计。令牌就是一个编码而已,例如 sfdqeorqlldfasldfals 这样的编码。举个简单的例子,比如说子站将用户界面导航到SSO系统 "http://www.abc.com/login?site=7762838&from="+ UrlEncode("http://www.def.com/site1/mmxx.aspx?id=123"); 这时候SSO会判断用户是否在这个login页面已经登录。如果没有登录,就会显示7762838的内容并询问用户是否登录。如果登录了,SSO会把用户界面重新导航回 http://www.def.com/site1/mmxx.aspx?id=123&sso=sfdqeorqlldfasldfals 这就是简单的传递。
  • 打赏
  • 举报
回复
单点登录的核心不是什么“跨域”不跨域的问题,而是解决“可信任”的问题。你可以想象一下,假设一个“求代码”的网站,跟买卖黄金的网站的所谓Session互通有无,这种系统绝对会被买卖黄金的网站扔掉的,因为这种系统“连钓鱼都不用了”直接给人家提供数据了。
ynduanlian 2014-12-19
  • 打赏
  • 举报
回复
如果是B端和S端,可以通过POST或GET传递参数,那么现在两个SERVER端,分站的SERVER端如何和主站的Server端传递数据?
ynduanlian 2014-12-19
  • 打赏
  • 举报
回复
首先判断本站点是否已登录,未登录的话向主站点发起请求确认在主站点上是否有对应账号登录,如果有,返回令牌,当前系统通过令牌向主站点发起登录请求(这一步无需账号密码),最终实现登录 ------------------------------------------------------ 这个令牌如何最简单的传递呢?
ynduanlian 2014-12-19
  • 打赏
  • 举报
回复
我想要实现的是: 打开浏览器访问ABC之一时,都需要输用户密码登录, 而如果已访问A或C,再访问B时就不用用户再次输用户密码登录
  • 打赏
  • 举报
回复
引用 4 楼 lwq222121 的回复:
我理解的是父系统为A,它有B,C,D三个挂靠系统(你的说法),当BCD被访问时,都要跳转到A去验证,在A验证完毕后,返回一个指令来指示BCD是否能登录系统
当然。如果了解了基本的规则,自己就能找到比较正确的资料。
qzyf1992 2014-12-19
  • 打赏
  • 举报
回复
为什么我感觉cookie跨域就能解决问题。。
  • 打赏
  • 举报
回复
所谓的单点登录,指的是必须要有一个主服务站点,所有的登录验证均在主服务站点,然后SSO实现的是登录一次,然后每个地方都无需再登录,而不是每个地方都已经处于登录状态,这两个话看起来结果一样,但过程却完全不一样,SSO是在访问相应功能时,首先判断本站点是否已登录,未登录的话向主站点发起请求确认在主站点上是否有对应账号登录,如果有,返回令牌,当前系统通过令牌向主站点发起登录请求(这一步无需账号密码),最终实现登录
lwq222121 2014-12-19
  • 打赏
  • 举报
回复
引用 2 楼 ynduanlian 的回复:
[quote=引用 1 楼 sp1234 的回复:] 当一个子系统要登录SSO系统时,它要把用户导航到SSO系统去登录,而它自己并不能处理用户登录(它自己不能拿到用户密码)。如果它自己给用户一个登录窗,我们可以说它是“打着单点登录名义的钓鱼网站”。 许多人所谓的“让用户只需登录一次,就能在访问这些模块时都是已登录的状态”的想法,都是无厘头的幻想,缺乏对单点登录的基本规则的了解。
您好,没看懂您的意思?可否麻烦解释一下?[/quote] 我理解的是父系统为A,它有B,C,D三个挂靠系统(你的说法),当BCD被访问时,都要跳转到A去验证,在A验证完毕后,返回一个指令来指示BCD是否能登录系统
ynduanlian 2014-12-19
  • 打赏
  • 举报
回复
或者说,这些模块代码我都可以进行增改的情况下,有没有什么比较简单的解决方案?
ynduanlian 2014-12-19
  • 打赏
  • 举报
回复
引用 1 楼 sp1234 的回复:
当一个子系统要登录SSO系统时,它要把用户导航到SSO系统去登录,而它自己并不能处理用户登录(它自己不能拿到用户密码)。如果它自己给用户一个登录窗,我们可以说它是“打着单点登录名义的钓鱼网站”。 许多人所谓的“让用户只需登录一次,就能在访问这些模块时都是已登录的状态”的想法,都是无厘头的幻想,缺乏对单点登录的基本规则的了解。
您好,没看懂您的意思?可否麻烦解释一下?
  • 打赏
  • 举报
回复
当一个子系统要登录SSO系统时,它要把用户导航到SSO系统去登录,而它自己并不能处理用户登录(它自己不能拿到用户密码)。如果它自己给用户一个登录窗,我们可以说它是“打着单点登录名义的钓鱼网站”。 许多人所谓的“让用户只需登录一次,就能在访问这些模块时都是已登录的状态”的想法,都是无厘头的幻想,缺乏对单点登录的基本规则的了解。
Xanl 2014-12-19
  • 打赏
  • 举报
回复
引用 7 楼 qzyf1992 的回复:
为什么我感觉cookie跨域就能解决问题。。
同感

62,243

社区成员

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

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

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

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