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

waker
  • 565

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

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

评论
阅读 3.9k
5 个回答

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

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

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

业务要求使用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 查询用户是否已登录 !

建议存储session用memcache

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

宣传栏