当一个子系统要登录SSO系统时,它要把用户导航到SSO系统去登录,而它自己并不能处理用户登录(它自己不能拿到用户密码)。如果它自己给用户一个登录窗,我们可以说它是“打着单点登录名义的钓鱼网站”。许多人所谓的“让用户只需登录一次,就能在访问这些模块时都是已登录的状态”的想法,都是无厘头的幻想,缺乏对单点登录的基本规则的了解。

解决方案 »

  1.   

    您好,没看懂您的意思?可否麻烦解释一下?
    我理解的是父系统为A,它有B,C,D三个挂靠系统(你的说法),当BCD被访问时,都要跳转到A去验证,在A验证完毕后,返回一个指令来指示BCD是否能登录系统
      

  2.   

    所谓的单点登录,指的是必须要有一个主服务站点,所有的登录验证均在主服务站点,然后SSO实现的是登录一次,然后每个地方都无需再登录,而不是每个地方都已经处于登录状态,这两个话看起来结果一样,但过程却完全不一样,SSO是在访问相应功能时,首先判断本站点是否已登录,未登录的话向主站点发起请求确认在主站点上是否有对应账号登录,如果有,返回令牌,当前系统通过令牌向主站点发起登录请求(这一步无需账号密码),最终实现登录
      

  3.   

    为什么我感觉cookie跨域就能解决问题。。
      

  4.   

    我想要实现的是:
    打开浏览器访问ABC之一时,都需要输用户密码登录,
    而如果已访问A或C,再访问B时就不用用户再次输用户密码登录
      

  5.   

    如果是B端和S端,可以通过POST或GET传递参数,那么现在两个SERVER端,分站的SERVER端如何和主站的Server端传递数据?
      

  6.   

    单点登录的核心不是什么“跨域”不跨域的问题,而是解决“可信任”的问题。你可以想象一下,假设一个“求代码”的网站,跟买卖黄金的网站的所谓Session互通有无,这种系统绝对会被买卖黄金的网站扔掉的,因为这种系统“连钓鱼都不用了”直接给人家提供数据了。
      

  7.   


    根据不同的系统有不同的设计。令牌就是一个编码而已,例如 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
    这就是简单的传递。
      

  8.   


    你可以想一下,当导航用户界面到 login 这一个页面时,它“什么登录信息都知道”,它自己作逻辑判断是否给根据A或者C的授权而直接给B授权。只要它重新把用户界面导航回 B 网站的页面时,它所附加的新的 sso 授权编码(这个编码通常在几十秒钟后就作废)能够让 B 网站作为凭据就行了。
      

  9.   

    .Net单点登录详解 (SSO)
      

  10.   

    可以考虑用cache,大量的session比较适用,自己搜搜!
      

  11.   

    我也感觉cookie可以实现你要的效果,你可以写一个公用的验证登录信息的方法,在abc页面都做判断,如果登录了就直接打开页面,如果没有登录就跳转到login页面。如果还担心安全问题的话,可以在验证方法中对cookie信息进行数据核实。