近些年,越来越多的企业正在迁移到云端,很多客户希望从任何地方、任何地点、任何计算机上无缝访问多个应用程序。在另一方面,由于公司在不同标签下都有数百个接触点,因此尝试处理所有这些接触点将使他们的 IT 部门倍感繁琐。
单点登录的出现是为了解决众多企业面临的痛点,即他们的用户及员工需要登录很多程序或系统,每个程序与系统都有不同的用户名和密码。在企业发展初期,可能仅仅有几个程序时,管理账户和密码不是一件难事。但是当企业有数十、数百、数千应用程序时,试图了解哪位客户、哪位员工在使用哪个应用程序或系统中的什么账户、拥有哪些权限变得异常困难。
能否合理分配员工访问哪些程序和系统,对于合规性和监管性要求高的公司至关重要。所以,企业迫切需要一个轮子——这个轮子可以让员工只输入一次账号和密码,成功登录后,就可以访问任何相互信任的系统。
01
什么是单点登录?
单点登录英文全称 Single Sign On,简称 SSO。它的定义是:在多个应用系统中,用户只需要登录一次,即可访问所有相互信任的应用系统。例如,常见的单点登录是通过一次登录访问各种应用程序。例如,登录您的员工账号就可以让您访问飞书、销售易、客户系统等应用程序,无需再次输入账号和密码。
02
常见的单点登录五种协议
常见的 OIDC、OAuth 2.0、SAML2、CAS 3.0、LDAP 为标准认证协议。标准协议会按照特定的方式传递用户信息,正规的业务系统产品都会支持标准协议,使用标准协议对接可以一劳永逸地完成对接。
标准协议的推荐度:OIDC > SAML2 > CAS 3.0 > LDAP > OAuth2.0。下面我们来一一介绍:
OAuth 是一种关于授权(Authorization)的开放网络标准,是目前最流行的授权机制,在客户与服务商之间,设置授权层。客户必须先登录授权层,此时服务商会向客户授权令牌的权限及使用期限,然后客户才能登录服务商,使用其服务。
目前最新的版本为 OAuth 2.0 版,主要有四个主体:
- 授权服务器,负责颁发访问令牌(Access Token),Authing 是授权服务器。
- 资源所有者,应用的用户是资源的所有者,授权其他人访问其资源。
- 调用方,调用方请求获取访问令牌(Access Token),经过用户授权后,Authing 为其颁发访问令牌(Access Token)。调用方可以携带访问令牌(Access Token)到资源服务器访问用户的资源。
- 资源服务器,接受访问令牌(Access Token),然后验证它的被赋予的权限项目,最后返回资源。
OAuth 2.0 有四种授权模式:
- 授权码(Authorization-code):指的是第三方应用先申请一个授权码,然后再用该码获取令牌。该方式是最常用的流程,安全性也最高,它适用于那些有后端的 Web 应用。
- 隐藏式(Implicit):该模式面向纯前端应用,App 认证服务器只返还一次授权码。
- 密码式(Password):允许客户端或者第三方应用,直接使用用户的账号密码进行令牌的获取。该方式在用户端应用广泛。
- 凭证式(Client credentials):适用于没有前端的命令行应用,即在命令行下请求令牌。该方式操作简单,只需要发送客户请求,即可获得访问令牌(Access Token),但这种方式非常不安全,需要对客户端完全信任,且客户端本身需要具备安全性。
常见的 OAuth 2.0 授权流程如下:
- 在你的应用中,让用户访问登录链接,浏览器跳转到 Authing,用户在 Authing 完成认证。
- 浏览器接收到一个从 Authing 服务器发来的授权码。
- 浏览器通过重定向将授权码附带在重定向地址后面。
- 你的应用服务将授权码发送到 Authing 获取 AccessToken,如果需要,还会返回 refresh token。
- 你的应用后端现在知道了用户的身份,后续就可以保存用户信息,重定向到前端其他页面,使用 AccessToken 调用资源方的其他 API 等等。
二、OpenID Connect (OIDC) 是一个身份验证层,是基于 OAuth 2.0 的认证方式,可提供单点登录功能,授权流程同 OAuth 2.0,其对 OAuth 2.0 的扩充,主要体现在——认证与授权过程中会额外返还令牌(ID Token),授权模式与 OAuth 2.0 一致。
OIDC 这个新型单点登录协议在保障安全性的同时,与 OAuth2.0 相比增加了认证能力,与 CAS 相比增加了授权能力,同时使用上比SAML简单,保证了认证授权的便捷性、私密性、安全性,是企业管理的最佳选择。

三、统一认证服务(CAS)是一种开放、简单且完备的身份验证协议。该协议是客户端、服务器与浏览器的三方约定,是大家都必须遵守的规则。
在 CAS 协议中,定义了 Service Ticket 作为客户端与服务器之间随机的票据,授权流程如下:
- 访问服务:客户端发送请求访问应用系统提供的服务资源。
- 定向认证:客户端会重定向用户请求到服务器。
- 用户认证:定向到服务器后,用户进行身份认证。
- 发放票据:服务器会产生一个随机的 Service Ticket 。
- 验证票据:服务器会验证票据 Service Ticket 的合法性。
- 传输用户信息:服务器验证票据通过后,传输用户认证结果信息给客户端。

四、轻量级目录访问协议 (LDAP) 是一种行业标准,基于X.500标准的轻量级目录访问协议,用来进行统一账号管理、身份验证平台。
但是,LDAP 不会定义登录这些系统的方式,它通常作为身份验证过程和访问控制过程的一部分。例如,在用户可以访问特定资源之前,LDAP可用于查询该用户及其所属的组织,以查看该用户是否有权访问该资源。
五、安全断言标记语言(SAML)是一个基于 XML 的开源标准数据格式,允许网络上的多台计算机共享安全凭据,SAML2.0 可以实现基于网络跨域的单点登录(SSO), 以便于减少向一个用户分发多个身份验证令牌的管理开销。
主要有两个主体:
- 服务提供方(Service Provider)
- 身份提供方(Identity Provider)
授权流程如下:
- 服务提供方(Service Provider)向 身份提供方(Identity Provider) 发出 SAML 身份认证请求消息,请求其鉴别用户身份;
- 身份提供方(Identity Provider)向用户索要用户名和口令,并验证其是否正确。
- 如果验证无误,身份提供方(Identity Provider)向服务提供方(Service Provider)返还 SAML 身份认证的应答,表示该用户已经成功登录,该应答中还包括了一些额外信息,以确保应答没有被篡改和伪造。

最后,我们给 OIDC、OAuth 2.0、SAML2、CAS 3.0 标准认证协议做一个具体对比:
