本文介绍了SSO单点登录的概念和实践方式,以及单点登录的应用意义。
相信很多朋友都看了罗振宇“时间的朋友”跨年演讲,其中提出了一个新的概念“新基础设施”。其中提到了19年天猫双十一美妆品牌销量第一名——“完美日记”,借助“新基础设施”在短短两年时间,就达到甚至超越了传统企业很多年深耕了多年的市场水平。而建设一个企业级应用时,亦可借助一些通用的“基础设施”提供的能力,快速、高效地搭建应用,SSO单点登录就是其中一项非常常见的通用能力。
引言
在原来软件开发模式下,任何一个模块都是我们程序猿大哥一行一行代码写出来的。现如今很多现成的功能,通过服务的形式提供给我们,拿来即用。
- 云计算基础服务——服务器、网络、数据库等等;
- 中间件——消息队列MQ、Redis、日志服务、应用配置管理ACM等等;
- 前、后端开发框架——VUE、SpringCloud;
- 短信服务——短信运营商、各大云服务商的短信服务;
- 数据埋点——埋点服务提供商;
- 消息推送——友盟、极光推送;
在企业级应用中也有很多集成的功能产品,SSO单点登录、工作流引擎、表单引擎等等不胜枚举。其实就和我们在用Axure画原型的时候,设计一套符合产品前端组件的元件库(比如我们常用的就是Element-ui),不用每次都用基础的线框制作原型图,需要放一个穿梭框直接拖过来用就好。
简介
单点登录(SingleSignOn),简称为SSO,是比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
- 企业开始进行信息化建设,搭建了一套业务系统A。通过用户名密码就可以登录。
- 随着业务的发展,又搭建了业务系统B、业务系统C、业务系统D……,每套系统都需要登录、输入各自的用户名密码,记忆成本高。
- 通过打通数据层,共用底层用户数据,统一不同业务系统的鉴权机制,实现了登录所有系统用一套用户名密码即可。但是每套系统都得登录一遍,操作起来还是麻烦,可以不可以只登录一次就行了?
- SSO单点登录应运而生,所有新技术的变革都是解决某项用户需求痛点。
实践
先通过一个栗子描述一下单点登录实现的方式:
员工小明拿着公司的一卡通,可以进公司大门,可以当饭卡刷,可以公司内便利店买东西。
- 小明进公司大门,看门大爷问小明要公司的一卡通,小明没有一卡通,查了查电话本,找到了人力部门的电话;
- 看门大爷把人力部门电话给了小明;
- 小明给人力部门电话打了过去;
- 人力部门接了电话;
- 小明报上了自己的大名,手机号,哪个部门等等信息;
- 人力小姐姐去系统里面查了查,还真有小明这个人,于是就给了小明一个一卡通;
- 然后小明又拿着这个一卡通给老大爷一看;
- 老大爷还得再次确认一下这个一卡通是不是真的,老大爷又去跟人力确认;
- 人力告诉老大爷,这个一卡通确实有效;
- 老大爷把小明放进去了;
小明直到今天下班都拿着一卡通,去吃饭刷一卡通,去便利店拿着一卡通,通过一卡通确认小明的身份。直到下了班,把一卡通还给了公司。
刚才这个例子简单描述了目前实现单点登录比较流程的一个框架——CAS。
下面我们把实现逻辑还原一下。
- 【客户端】发起请求,访问www.123.com,经过一个过滤器(CAS提供),判断用户是否登录过。如果没登录重定向到【认证中心】;
- 【认证中心】给【客户端】返回了重定向地址:www.cas.123.com;
- 【客户端】重定向到www.cas.123.com;
- 【认证中心】返回了登录页面;
- 用户输入用户名、密码;
- 【认证中心】验证用户名、密码真实性。真实有效后,提供了一个ticket;
- 【客户端】又拿着ticket去www.123.com请求;
- 【服务端】拿着刚才用户提供过来的ticket去认证中心验证真实性;
- 【认证中心】确认ticket真实有效;
- 【服务端】返回相关资源,【客户端】展示相关资源。
当用户在访问其他业务系统时候,其他业务系统都会去【认证中心】验证用户携带的这个ticket,认证通过后即可直接访问其他业务系统,无需再次登录。
从实现方式上还其他协议可以实现单点登录目的:
- SAML安全断言标记语言(SecurityAssertionMarkupLanguage);
- OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。
- OIDC是OpenIDConnect的简称,它在OAuth2上构建了一个身份层,是一个基于OAuth2协议的身份认证标准协议;
也有一些已商业化的解决方案:OracleOAM、阿里云IDaaS等。
具体采用何种解决方案,看要看业务的具体需求。而且不同解决方案各有优略,在此不再赘述。
意义
我们了解到单点登录解决了用户端交互体验的诉求,其实它的好处远不止于此。
数据应用方面意义
- 针对用户来说,减少了繁琐的操作,优化了用户体验;
- 针对企业来说,通过单点登录统一用户数据,推动私域流量的搭建,同时是构建企业数据中台的基石。
不论是企业内部的业务系统,还是面向各行业C端用户的产品也都在进行单点登录建设。
产品研发方面意义
- 统一性——统一底层数据结构;
- 拓展性——利于外部系统对接;
- 安全性——自己保障高可用同时,通过统一鉴权机制,进一步保障数据安全;
- 高效性——提高产品开发效率,不用重复造轮子;大型业务系统背后,用户一次操作可能需要很多业务系统协作,通过统一的鉴权机制提升整体性能效率;