企业级单点登录设计
大多数企业、机构都有各种各样的系统,每个系统都有各自的用户体系和登录流程,因此用户需要记忆各个系统的登录账号和密码,以及登录地址。怎样将这些孤立的系统整合起来,让用户一次登录,处处登录,让系统之间的访问既安全又便捷就是单点登录的目的。
单点登录可以通过整合用户体系、账号绑定、授权绑定等多种方式完成。
4.9.1 认识单点登录
单点登录(Single Sign On,SSO)是一种企业级系统整合方案,目的是只需要登录一次就可以访问所有互相信任的系统。
企业发展初期一般只有一个系统,随着企业不断发展,系统不断增多,有OA系统、财务系统、决策系统、销售系统等,大型企业的系统甚至多达几百个。这些系统有的是企业在不同时期开发的,有的是从外部厂商采购的。图4-38所示为企业前后期登录状况对比。
图4-38 企业前后期登录状况对比
企业都希望用户只需要登录一次,就可以全系统通用。一个人只记住一个系统的账号、密码和地址即可,这就是所谓的单点登录模式。
如图4-39所示,用户只需要登录系统A,就代表可以访问系统B、
C、D、E。用户只需要记忆系统A的账号、密码和地址信息即可。
图4-39 单点登录
如图4-40所示,实现单点登录面临的问题如下。
(1) 各个系统的账户体系没有统一,各自存储在自己的数据库中
(可能数据库类型也不同),数据没有打通。
(2) 彼此之间难以建立关联关系,各个系统的登录流程各不相同,有的系统采用账号+密码登录,有的系统采用手机号+密码登录,等等。
(3) 用户登录成功后,无法与多个系统保持Session会话。
图4-40 单点登录面临的问题
4.9.2 简单绑定单点登录设计
单点登录简单绑定模式如图4-41所示。例如,用户在OA系统的账号为yinhongliang,在财务系统的账号为yinhl,在进销存系统的账号为 yhl,密码也各自不同。 如果想登录OA系统,就可以访问财务系统和进销存系统,则必须建立账号绑定关系,一个账号要能绑定多个系统账号(常见的绑定QQ号、微信号、微博账号,都是类似的原理)。
图4-41 单点登录简单绑定模式
为了完成账号绑定,简单的办法就是在OA系统中提供一个账号绑定的功能,让用户录入其在第三方系统中的账号和密码,把其他系统的账号和密码都保存下来并与自己的账号形成映射关系。例如,可以在OA系统中按表4-8进行绑定。
表4-8 OA系统第三方用户绑定
对于yinhongliang这个账号,就会形成表4-9所示的绑定关系。
表4-9 用户yinhongliang账号绑定数据存储示例
因此,当用户想访问财务系统和进销存系统时,只要查询出对应的账号和密码,就可以模拟第三方登录的流程,跳转进入第三方系统,从而完成单点登录功能。
优缺点分析:这种模式最大的优点是简单,第三方系统无须进行开发;缺点是安全性极差,相当于把账号和密码都暴露给了其他系统,并且此种模式并不适用于手机验证码、扫码登录等方式。
4.9.3 授权绑定单点登录设计
比较安全的方式是访问令牌绑定设计,账号和密码不暴露给其他系统,而只发放凭证。
单点登录授权绑定流程如图4-42所示,用户首先登录SSO系统,然后发起绑定操作。这时需要跳转到第三方系统的授权页面(此页面为被绑定系统的页面,而不能由OA系统开发,从而保证安全性)。授权页面可以为用户名密码认证、手机验证码认证、扫码认证等方式。当第三方系统登录认证成功后,会生成一串加密字符,作为系统访问凭证返回SSO系统。后续SSO系统跳转或访问其他系统时,只需要携带此凭证进行访问即可。第三方系统接收到凭证之后,验证凭证的有效性,如果凭证合法、有效则可访问。
图4-42 单点登录授权绑定流程
在SSO系统中新建一张账号绑定表,如表4-10所示。
表4-10 账号绑定
对于yinhongliang这个账号,就会形成表4-11所示的绑定关系。
表4-11 用户yinhongliang账号绑定数据存储示例
在第三方系统中新建用户凭证表,可以做很多的自主控制,安全性牢牢地把控在各系统自己的手中,如表4-12所示。
表4-12 用户凭证
续表
对于yinhl这个账号,在财务系统会有表4-13所示的数据存储。
表4-13 用户yinhl在财务系统中的用户凭证数据
当SSO系统访问第三方系统时,就是通过表4-13中的数据来确认凭证是否有效和是否到期的。也可以通过表4-13中的数据状态、有效期等数据来控制凭证是否可以使用,是否需要作废并重新申请。