单点登录流程
-
向W1发送请求验证页面,重定向到SSO
-
向SSO发送请求,如果存在cookie,则返回token
-
浏览器将token发送给W1,W1到SSO验证token
-
通过后跳转响应验证页面
-
向W1发送请求验证页面,重定向到SSO
-
向SSO发送请求,若不存在cookie,重定向到W1登录页
-
提交登录信息,W1将登录信息发送给SSO验证身份信息
-
SSO验证成功并生成token,返回给W1,W1将token返回给浏览器
-
浏览器将token发送到SSO,SSO创建cookie并将重定向W1的信息返回给浏览器
-
浏览器将token发送给W1,W1发送到SSO进行验证(4,5,6也可以是返回令牌,W1将令牌再发送到SSO进行验证)
-
验证通过进行响应
-
向W2发送请求验证页面,重定向到SSO,带cookie
-
返回重定向W2的token
-
浏览器将token发给W2,W2发送到SSO进行验证
-
验证通过并响应
分布式session共享
- session复制到所有机器
- session绑定,利用hash使得同一个ip总是请求到同一台服务器。无法实现高可用,机器挂了就不存在了
- 利用cookie
- 利用独立部署的session服务器(集群)
这种解决方案事实上是应用服务器的状态分离,分为无状态的应用服务器和有状态的session服务器,然后针对这两种服务器的不同特性分别设计架构。
对于有状态的session服务器,一种比较简单的方法是利用分布式缓存(memcached), 数据库等。在这些产品的基础上进行包装,使其符合session的存储和访问要求。
如果业务场景对session管理有比较高的要求,比如利用session服务基层单点登录(sso),用户服务器等功能,需要开发专门的session服务管理平台。