主流单点登录SSO技术方案对比分析,JWT、CAS、Oauth2、SAML 

2022-07-17 15:41

单点登录(SSO),英文全称为 Single Sign OnSSO 是指在多个应用系统中,用户只需要登录一次,就可以访问所有相互信任的应用系统。SSO 服务用于解决同一公司不同业务应用之间的身份认证问题,只需要登录一次,即可访问所有添加的应用。

单点登录的前提条件要做用户统一身份管理,即统一用户ID。比如阿里云应用身份服务IDaaS(英文名:Alibaba Cloud Identity as a Service,简称IDaaS)是阿里云为企业用户提供的一套集中式身份、权限、应用管理服务。市场上有很多类似的统一身份管理产品叫5A,提供集统一账户管理(Account)、统一身份认证(Authentication)、统一授权管理(Authorization)、统一应用管理(Application)、统一审计管理(Audit)。

本文重点介绍统一身份认证(Authentication),有的也叫单点登录SSO,目前主流的SSO技术有JWTCASOauth2SAML等。

一、基于JWT单点登录

Json web token JWT , 是一种用于双方之间传递安全信息的简洁的表述性声明规范。JWT作为一个开放的标准(RFC 7519),定义了一种简洁的方法用于通信双方之间以 Json 对象的形式安全地传递信息,该 token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。

业务系统可以快速的接入IDaaS(身份服务中心)平台,从而完成单点登录。并且JWT支持从SP(Service Provider 业务系统)发起单点登录请求,跳转到IDaaS平台,进行登录,再跳转回业务系统完成JWT令牌认证和业务系统的登录。同时, 也支持从IDaaS平台直接发起单点登录请求,传递JWT令牌后, 在业务系统进行验证,完成登录。两种方式主要共同点在于整个JWT的认证流程(后半截)是相同的,都需要业务系统开发JWT令牌验证和解析的接口,并且需要根据解析出来的用户子账户信息,判断用户是否为该业务系统用户。

以下是基于JWT进行单点登录SSO的原理:

 

 

图中:IDaaS指用户身份认证中心,SP指业务系统。

上述时序图阐述了基于JWT发起SSO登录请求时的基本流程,该流程主要分为以下6个步骤:

1)用户通过浏览器访问 IdaaS(户身份认证中心)应用服务 。

2)浏览器向IDaaS发起单点登录请求。

3IDaaS 生成 JWT token 令牌发送到业务系统。

4SP(业务系统)获取到 token 令牌,用提供的插件或方法解析验证 JWT token 令牌,解析成功获取到用户信息并验证用户是否存在于业务系统中。

5)业务应用服务器创建自己系统的请求会话,然后跳转到指定路径。

6)浏览器显示应用页面,完成sso登录。

验证通过:业务系统重定向到用户首页,或指定的二级页面。

验证失败:业务系统拒绝登录页面提示错误信息。

参考:https://help.aliyun.com/document_detail/167870.htm?spm=a2c4g.11186623.0.0.5c81578d0CileB#topic9164

二、基于CAS单点登录

CAS Central Authentication Service)中心授权服务,是 耶鲁大学(Yale University)发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法。

使用CAS 标准时,首先是由 CAS Client 发起, CAS Client 会重定向到 CAS Server进行登录,由 CAS Server 进行账户校验且多个 CAS Client 之间可以共享登录的 session Server Client 是一对多的关系;

从结构上看,CAS 包含两个部分: CAS Server  CAS Client CAS Server 需要独立部署,主要负责对用户的认证工作; CAS Client 负责处理对客户端受保护资源的访问请求,需要登录时,重定向到 CAS Server

下图是标准 CAS 最基本的协议过程:

 

 

CAS Client 与受保护的客户端应用部署在一起,以便 Filter 方式保护受保护的资源。对于访问受保护资源的每个人 Web 请求, CAS Client 会分析该请求的 Http 请求中是否包含 Service Ticket。如果没有,则说明当前用户尚未登录,于是将请求重定向到指定好的 CAS Server 登录地址,并传递 Service (也就是要访问的目的资源地址),以便登录成功过后转回该地址。

用户在上图流程中的 3 输入认证信息,如果登录成功,CAS Server 随机产生一个相当长度、唯一、不可伪造的结果 Service Ticket,并缓存以待将来验证。之后系统自动重定向到 Service 所在地址,并为客户端浏览器设置一个 Ticket Granted CookieTGC),CAS Client 在拿到 Service 和新产生的 Ticket 过后,在第 56 步中与 CAS Server 进行身份核实,以确保安全 Service Ticket 的合法性。

IDaaS 中, CAS (标准)应用模板实现了标准的 CAS 流程。它充当一个 CAS Server的角色。当 CAS Cient 决定使用IDaaS作为 CAS Server 时。在登录认证时需要使用 IDaaS 系统中公司的主账号,密码进行认证。

参考:https://help.aliyun.com/document_detail/163690.htm?spm=a2c4g.11186623.0.0.5c8166e2e2YyPx#topic-2486957

三、基于OAuth 2.0单点登录

OAuth 2.0的草案是在20105月初在IETF发布的。OAuth2是一个授权协议, 主要用来作为API的保护, 我们称之为STS(安全令牌服务, Security Token Service)。 但是在某些情况下, 也可以被用来实现WEB SSO单点登录。一般的流程是用户把发起页面的URLstate参数关联上, 并保存在SP(业务系统)本地,用户登录后, 可以获取一个Code, 利用Code拿到AT(Access Token) 后, 可以利用这个AT获取用户信息userinfo, 进而从state 中, 获取到对应的原始URL,并跳转到这个URL, 从而实现登录到一个业务应用SP的效果。 本文档详细描述了这个SSO过程。

 

 

图中:IDP指身份提供者,SP指业务系统。

参考:https://help.aliyun.com/document_detail/193871.htm?spm=a2c4g.11186623.0.0.5c811199rqKv9c#topic-2004851

https://www.ruanyifeng.com/blog/2019/04/oauth_design.html

https://www.ruanyifeng.com/blog/2019/04/oauth-grant-types.html

四、基于SAML协议单点登录

SAML协议出现之前,传统Web应用系统单点登录大都通过Cookie来实现,但由于浏览器的安全限制,只有同一个域名下的系统才可以共享Cookie,在云计算大行其道的今天, 该方案无法解决像SaaS这种跨多个域名系统之间的认证和授权问题,于是SAML协议应运而生。

SAMLSecurity Assertion Markup Language 安全断言标记语言)是一个基于XML的开源标准数据格式,为在安全域间交换身份认证和授权数据,尤其是在IDP(身份提供者)和SP(业务系统)之间。SAMLOASISOrganization for the Advancement of Structured Information Standards 安全服务技术委员会)制定的标准,始于2001年,其最新主要版本SAML 2.02005年发布。

作为一种流行的SSO协议, SAML同时支持IDP发起和SP发起, 也就是可以在登录门户后,跳转到任意一个应用, 也可以从一个应用发起,跳转到IDP, 登录认证后,再跳转回这个应用, 继续SSO。 二者都是SSO, 流程的前半部分参数不同, 后半部分是很相似的。

 

 

图中:IDP指身份提供者,SP指业务系统。

用户请求SP资源,SP生成SAML请求,IDP接收并解析SAML请求并进行用户认证后返回SAML响应,SP接收并解析SAML响应后,提起其中的令牌Assertion, 提供被请求的资源给用户使用。

参考:https://help.aliyun.com/document_detail/160431.htm?spm=a2c4g.11186623.0.0.5c814a9cveiFa3#topic930

https://baijiahao.baidu.com/s?id=1725446632667720841&wfr=spider&for=pc

单点登录技术如何选择

JWTCASOauth2SAML这几种单点登录方式,如何选择?主要从适用场景和集成难易程度两个方面考虑。从开发集成难易程度方面考虑,JWT最简单,CAS次之,Oauth2稍复杂,SAML最复杂。阿里云IDaaS推荐优先使用JWT方式,集成简单,业务系统改造较少,尤其适用于前后端分离架构下已经使用了JWT技术的系统。Oauth2是目前互联网最流行的单点登录技术,比如微信平台、QQ平台、钉钉平台等,但在企业应用方面,Oauth2使用远没有CAS多,尤其是企业存在大量的存量系统,有的是前后端分离架构,基于token认证鉴权,有的是传统SOA架构,基于中间件session会话认证鉴权,所以在企业内部改造Oauth2的成本比较高。SAML是协议最复杂的一种SSO,安全性最好,仅仅适用于web,开发集成难度高,一般企业内部的应用系统不推荐使用。

总之,在可满足业务需求的情况下,优先选择集成开发简单的单点登录SSO技术,推荐顺序为JWTCASOauth2SAML返回搜狐,查看更多