单点登录(SSO),英文全称为 Single Sign On。 SSO 是指在多个应用系统中,用户只需要登录一次,就可以访问所有相互信任的应用系统。SSO 服务用于解决同一公司不同业务应用之间的身份认证问题,只需要登录一次,即可访问所有添加的应用。
目前主流的SSO技术有JWT、CAS、Oauth2、SAML等。
一、基于JWT单点登录
Json web token ( JWT ), 是一种用于双方之间传递安全信息的简洁的表述性声明规范。JWT作为一个开放的标准(RFC 7519),定义了一种简洁的方法用于通信双方之间以 Json 对象的形式安全地传递信息,该 token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。
二、基于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过程。
图中:IDP指身份提供者,SP指业务系统。
四、基于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, 流程的前半部分参数不同, 后半部分是很相似的。
图中:IDP指身份提供者,SP指业务系统。
用户请求SP资源,SP生成SAML请求,IDP接收并解析SAML请求并进行用户认证后返回SAML响应,SP接收并解析SAML响应后,提起其中的令牌Assertion, 提供被请求的资源给用户使用。