电商平台中无论是前端还是后端会存在大量的业务应用,在整个交易的过程中请求是在各个业务应用中流转的,对于用户来讲只需要登录一次就可以访问所有的业务,这就是单点登录SSO。

单点登录开源有很多的解决方案,比如基于session的SSO和基于cookie的SSO。

业界使用比较多的基于session的SSO的开源解决方案比如CAS,流程示意图如下:

这里不去详细说明流程,读者可以参考其他资料的说明

基于cookie的SSO在原理上和上面的差不多,区别是把用户设置到cookie中作为token的一部分进行传递,而基于session的SSO中cookie是服务器给客户端生成的TGT。

相对来说,基于cookie的安全性不高。

以上是单机环境下的方案,更多的满足传统企业级的方案;而在电商平台中,对SSO的性能、可用性、缓存数据量都是一个挑战,因此需要基于CAS做改造,满足互联网的要求。

简单对CAS的性能做了个压测:

软硬件环境:两个App,一个CAS Server。机器都是PC server,16core 32G

场景:用户在一个迭代中做登陆、操作业务、登出操作

测试结果:

CAS Server的机器情况
top - 17:05:18 up 1 day,  8:39,  2 users, load average: 4.25, 2.62, 1.22

Tasks: 783 total,   1 running, 782sleeping,   0 stopped,   0 zombie

Cpu(s): 69.4%us,  5.9%sy, 0.0%ni, 22.7%id,  0.0%wa,  0.0%hi,  2.0%si,  0.0%st

Mem:  65964644k total, 16462164k used,49502480k free,   251036k buffers

Swap: 30719992k total,       0k used, 30719992k free,  1240744k cached

TPS:2000,RT:20-30ms

改造后的SSO的架构示意图如下:

1、  改造CAS Server为无状态的节点,以前缓存的ticket、用户等信息放到后端的cache中

2、  后端Cache采用redis,去掉持久化的功能,只做cache用

3、  考虑数据量的关系,Cache采用分布式的方案,进行数据切分,每个sharding只存储一定范围的数据

4、  每个sharding采用主备方式,leader作为主节点,replica只作为备份,在主节点宕机时可以升级为主节点

5、  整个集群的采用zookeeper进行分布式集群管理服务。

6、  App watch sso节点的变化,采用轮询RR算法选择一台SSO Server进行请求,SSOServer对ticket采用hash算法定位到后端的cache进行存储。

7、  用户登出平台时,采用轮询RR算法选择一台SSO Server进行请求,清除Cache中的相关信息以及http方式回调各个应用的登出服务接口

8、平台初始化阶段需要把cache的各个sharding分配到某台SSO Server上做定时的Ticketexpire验证清理工作,也就是一台SSO Server负责一个或者多个sharding的Ticketexpire工作,进而http方式回调各个应用的登出服务接口。

 
 

转)SSO单点登录在互联网电商应用中的解决方案(基于CAS的改造)的更多相关文章

  1. SSO单点登录实现原理

    SSO单点登录实现原理 只是简要介绍下基于java的实现过程,不提供完整源码,明白了原理,我相信你们可以自己实现.sso采用客户端/服务端架构,我们先看sso-client与sso-server要实现 ...

  2. SSO单点登录 与 CAS

    本文转载自http://www.imooc.com/u/2245641/articles非常好的sso单点登录理解文章 作者: 常明,Java架构师 Web应用系统的演化总是从简单到复杂,从单功能到多 ...

  3. CAS实现SSO单点登录

    环境 cas-server-4.1.8,cas-client-3.4.0,Java-8,Maven-3,Tomcat-7.0.72 CAS Server 安装 点此进入 CAS 下载列表,选择下载 c ...

  4. CAS FOR WINDOW ACTIVE DIRECTORY SSO单点登录

    一.CAS是什么? CAS(Central Authentication Service)是 Yale 大学发起的一个企业级的.开源的项目,旨在为 Web 应用系统提供一种可靠的单点登录解决方法(支持 ...

  5. 使用 JSONP 实现简单的 SSO 单点登录

    SSO 即 Single Sign On(单点登录).  一.二级域名之间的单点登录 不需要用到JSONP 或者 p3p 协议,直接使用 COOKIE 就行了,因为顶级域名相同就能实现 COOKIE ...

  6. CAS实现SSO单点登录原理

    1.      CAS 简介 1.1.  What is CAS ? CAS ( Central Authentication Service ) 是 Yale 大学发起的一个企业级的.开源的项目,旨 ...

  7. [sso] 单点登录认证流程

    一.流程说明 第一步:访问cas过滤链接ssoLogin,拼凑定向到 CAS_SERVER 获取ticket的URL 第二步:CAS_SERVER校验用户信息,生成Ticket 第三步:重新定向到访问 ...

  8. php sso单点登录原理阐述

    原理:就是用户登录了单点登录系统(sso)之后,就可以免登录形式进入相关系统: 实现: 点击登录跳转到SSO登录页面并带上当前应用的callback地址 登录成功后生成COOKIE并将COOKIE传给 ...

  9. SSO单点登录之跨域问题

    第一次写博客,与大家共勉. 这里用到的原理其实非常简单,将cookie存在一个公共的站点的页面上就可以了,这里我们管那个站点叫主站S. 先说说所谓的跨域 环境1:a.xxx.com需要跟b.xxx.c ...

随机推荐

  1. visual studio 声明数组太大,导致栈溢出

    在解释原因前我们先看一下一个由C/C++编译的程序占用的内存分为几个部分: 1.栈区(stack segment):由编译器自动分配释放,存放函数的参数的值,局部变量的值等.在Windows下,栈是向 ...

  2. spark on hive 配置hive的metastore为mysql

    <property><name>hive.metastore.uris</name><value></value><descripti ...

  3. PLSQL_解析过程及硬解析和软解析的区别(案例)

    2014-08-11 Created By BaoXinjian

  4. hdu 1536 S-Nim(sg函数模板)

    转载自:http://blog.csdn.net/sr_19930829/article/details/23446173 解题思路: 这个题折腾了两三天,参考了两个模板,在这之间折腾过来折腾过去,终 ...

  5. [实变函数]4.2 Egrov 定理

    1 一致收敛很重要, 但可惜的是很多时候不一致收敛. 比如 $$\bex f_n(x)=x^n\to f(x)=\sedd{\ba{ll} 0,&x\in [0,1)\\ 1,&x=1 ...

  6. 编译器错误消息: CS0234: 命名空间“Purple”中不存在类型或命名空间名称“Model”(是否缺少程序集引用?)

    编译错误 “/storeimg”应用程序中的服务器错误. 编译错误 说明: 在编译向该请求提供服务所需资源的过程中出现错误.请检查下列特定错误详细信息并适当地修改源代码. 编译器错误消息: CS023 ...

  7. maven问题

    pom.xml ... </dependencies> <repositories> <repository> <id>sf-nexus</id& ...

  8. R如何检验类别变量(nominal variable)与其他变量之间的相关性

    1.使用Pearson积差相关系性进行检验的话可以判断两个变量之间的相关性是否显著以及相关性的强度 显著性检验 (significant test) 连续变量 vs 类别变量 (continuous ...

  9. XtraReport 实例化 打印

    // Create a report instance, assigned to a Print Tool.     ReportPrintTool pt = new ReportPrintTool( ...

  10. php 防止sql注入

    Q:如果把用户输入的没有任何改动的放到SQL的查询语句中,很有可能会导致SQL注入,比如说下面的例子: $unsafe_variable = $_POST['user_input']; mysql_q ...