方案A 可以做一些改进
1.A登录=>跳转到登录中心(登录中心将登录数据载入到一个缓存当中,设置缓存过期策略等),并给用户一个会话,保存用户信息
2.返回A,带上Token
3.A获取Token,向登录中心发出HttpWebRequest请求带上Token,进行验证
4.验证成功,A得到登录中心响应的用户数据,载入会话,登录成功5.B使用登录中心验证登录,跳转到登录中心,此时登录中心已有登录会话(即第一步时被标记为已登录)
6.同2-4步骤

解决方案 »

  1.   

    To tsgx_1989:
    1:从A到B, 其跳转URL上也带有Token? 那是不是认为从A到B,其 URL及参数没有变化呢?
      

  2.   


    1.如果我来做我不会从A到B上也带Token,我会先跳转到B,然后B跳转到验证中心,或让用户选择使用登录中心验证
    2.跳转到验证中心后,验证中心验证是否有登录会话保持着(上面的1步骤已经保存了会话)
    3.如果有直接返回Token,给B
    4.上次回复的 2到4步骤
      

  3.   


    画的一个简单的UML序列图,仅供参考
      

  4.   

    1.个人觉得每个APP之间是应该没有耦合的.
    2.也就是说 A跳转到B不需要带上任何Token
    3.每个子系统 都应该给出一个页面,用作跳转到登录中心,并带上自己的APPID
    4.登录中心验证是否有会话,请记住,当第一次用户登录成功时保存会话,那么SessionId 已经保存在了浏览器Cookie当中作为一个Key.
    5.那么当每个子系统再跳转到该登录中心时再去验证会话,如果有直接生产Token跳转到APPID对应的子系统
    6.子系统在根据Token 去请求(HttpWebRequest)登录中心(登录中心有一个容器池用于保存每个Token,对应的已登录的用户信息)
    7.子系统得到验证结果,以及用户信息,授权验证
      

  5.   

    感谢 tsgx_1989的回复。对4-5步骤还有些疑问:
    1:如果是从一个顶级域名跳转到另一个顶级域名,登录中心怎么验证其会话?
      

  6.   


    你说的 俩个顶级域名是 2个子系统吧?场景:
    A通过登录中心登录验证返回A
    A跳转到B,B跳转到登录中心,登录中心验证会话.登录中心其实是共享了登录会话.