expr

CAS、Oauth2还是SAML,单点登录SSO方案该怎么选?

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

本文重点介绍统一身份认证(Authentication),有的也叫单点登录SSO,目前主流的SSO技术有CAS、Oauth2、SAML等。那么对于企业而言进行统一身份管理,应该如何选择单点登录的协议呢?下面我们对几种常见的单点登录协议进行详细的讲解。



基于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 Cookie(TGC),CAS Client 在拿到 Service 和新产生的 Ticket 过后,在第 5,6 步中与 CAS Server 进行身份核实,以确保安全 Service Ticket 的合法性。

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



基于OAuth 2.0单点登录

OAuth 2.0的草案是在2010年5月初在IETF发布的。OAuth2是一个授权协议, 主要用来作为API的保护, 我们称之为STS(安全令牌服务, Security Token Service)。但是在某些情况下, 也可以被用来实现WEB SSO单点登录。

一般的流程是用户把发起页面的URL和state参数关联上, 并保存在SP(业务系统)本地,用户登录后, 可以获取一个Code, 利用Code拿到AT(Access Token) 后, 可以利用这个AT获取用户信息userinfo, 进而从state 中, 获取到对应的原始URL,并跳转到这个URL, 从而实现登录到一个业务应用SP的效果。本文档详细描述了这个SSO过程。


基于SAML协议单点登录

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

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

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

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


单点登录技术如何选择

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

目前 OneAuth 身份云已支持 CAS 、OIDC、OAuth2.0 、SAML 协议应用的单点登录,企业无需自主研发对接,开箱即用。满足了大部分企业对应用的单点登录以及管理的需求。同时还对其进行精细化的授权与管理。MFA 策略多因素以及用户账号生命周期管理,全方位满足了企业的身份管理问题以及应用的单点登录需求。 


转载请注明,谢谢