单点登录如何设计(用redis)

登录www.baidu.com,访问tieba.baidu.com自动登录

自己的想法:登录baidu.com以后,服务器用redis记录登录者的客户端信息,再访问tieba.baidu.com的时候检查redis有没有这个客户端的登录情况,如果有,就运行登录。
大致想法是这样,不知道正确的实现方式是怎么样的?求分享点经验。

阅读 3.8k
评论
    5 个回答

    这里满设涉及的概念称之为 服务化/微服务化。
    现在有以下三个服务器:

    www.baidu.com (调用者)
    tieba.baidu.com (调用者)
    pic.baidu.com (调用者)
    login.baidu.com (服务者)。

    对于各个模块之间应该保持充分的独立性,如login.baidu.com对于外部调用者来说就是一个接口服务,调用者不能也没资格去直接操作服务者的功能,而应该使用服务者提供的接口(如登录,如查询是否登录)来进行业务处理。
    实现思路是你说的那个方向,可以看看我的这个回答: session多端登陆,共享怎么做的啊? (当然我这个是偏向于Session共享而不是SSO)

      • 9.4k

      业务要求使用redis么?

      我说说常规的单点登陆实现方案吧:

      1. 某个项目登陆成功,广播其他注册的项目进行登陆操作[写session的操作]

      2. 某个项目登陆成功,url会携带一个token,各个项目通过解析ticket获取uid进行写session操作

        服务器A : www.baidu.com
        服务器B : tieba.baidu.com
        服务器C : redis服务器

        用户在 A 登录,存cookie到C;
        用户跳转到 B ,登录验证 : B 访问 C 查询用户是否已登录 !

          • 1.8k

          建议存储session用memcache

            可以采用 OAuth 2.0,需要实现一个认证服务器 OAuth Server (假设为:passport.baidu.com),接入方相当于 OAuth Client。关于 OAuth 2.0 可参考阮老师文章:http://www.ruanyifeng.com/blo...

              撰写回答

              登录后参与交流、获取后续更新提醒

              相似问题
              推荐文章