Xiang想
2022/07/26阅读:135主题:橙心
CAS单点登录
今天领导给分了个任务,让我对多个系统做一套 CAS 单点,我眉头一皱,好家伙,听过但是没做过啊。心里不禁咯噔一下。
好在!我是大名鼎鼎的 阿里扫地僧 多隆
的小迷弟。
大致了解业务需求后,向领导要了一天时间分析实现。回到工位,开始挠头。

初始 CAS
首先我们来说一下 CAS,CAS 全称为 Central Authentication Service 即中央认证服务,是一个企业多语言单点登录的解决方案,并努力去成为一个身份验证和授权需求的综合平台。
CAS 是由 Yale 大学发起的一个企业级的、开源的项目,旨在为 Web 应用系统提供一种可靠的单点登录解决方法(属于 Web SSO )。
CAS 协议至少涉及三方:客户端 Web 浏览器,请求身份验证的 Web 应用程序和 CAS 服务器。 它也可能涉及后端服务,如数据库服务器,它没有自己的 HTTP 接口,但与 Web 应用程序进行通信。
这样就涉及到一个名称
单点登录
那到底啥是
单点登录
呢?用通俗易懂的话来说,就是一个账户在登录后,可以任意访问其他系统中免登录直接访问系统中的与其账户对应的资源,说白了,就是懒人一键登录。

在 SSO 体系中,主要包括三部分:
-
User (多个) -
Web 应用(多个) -
SSO 认证中心( 1 个)
而 SSO 的实现基本核心原则如下:
-
所有的登录都在 SSO 认证中心进行 -
SSO 认证中心通过一些方法来告诉 Web 应用当前访问用户究竟是不是已通过认证的用户 -
SSO 认证中心和所有的 Web 应用建立一种信任关系, SSO 认证中心对用户身份正确性的判断会通过某种方法告之 Web 应用,而且判断结果必须被 Web 应用信任。
优点
-
降低访问第 3 方站点的风险(“联合身份验证”),因为用户密码未在外部存储或管理 -
减少不同用户名和密码组合造成的密码疲劳 -
减少为同一身份重新输入密码所花费的时间 -
更简单的管理。作为正常维护的一部分,SSO 相关任务使用与其他管理任务相同的工具以透明方式执行。 -
更好的行政控制。所有网络管理信息都存储在一个存储库中。这意味着每个用户的权利和特权都有一个单一的、权威的列表。这允许管理员更改用户的权限并知道结果将在网络范围内传播。 -
提高了用户的工作效率。用户不再被多次登录所困扰,也不需要记住多个密码才能访问网络资源。这对帮助台人员也有好处,他们需要处理更少的忘记密码请求。 -
更好的网络安全。消除多个密码还可以减少安全漏洞的常见来源——用户写下他们的密码。最后,由于网络管理信息的整合,管理员可以确定地知道当他禁用用户的帐户时,该帐户被完全禁用。 -
异构网络的整合。通过加入不同的网络,可以整合管理工作,确保始终执行管理最佳实践和公司安全策略。
SSO 共享所有其他应用程序和系统用于身份验证的集中式身份验证器,并将其与技术相结合,以确保用户不必多次主动输入其凭据。
CAS 原理
相比于单系统登录,sso 需要一个独立的认证中心,只有认证中心能接受用户的用户名密码等安全信息,其他系统不提供登录入口,只接受认证中心的间接授权。间接授权通过令牌实现,sso 认证中心验证用户的用户名密码没问题,创建授权令牌,在接下来的跳转过程中,授权令牌作为参数发送给各个子系统,子系统拿到令牌,即得到了授权,可以借此创建局部会话,局部会话登录方式与单系统的登录方式相同。这个过程,也就是单点登录的原理,用下图说明

下面对上图简要描述
-
用户访问系统 1 的受保护资源,系统 1 发现用户未登录,跳转至 sso 认证中心,并将自己的地址作为参数 -
sso 认证中心发现用户未登录,将用户引导至登录页面 -
用户输入用户名密码提交登录申请 -
sso 认证中心校验用户信息,创建用户与 sso 认证中心之间的会话,称为全局会话,同时创建授权令牌 -
sso 认证中心带着令牌跳转会最初的请求地址(系统 1) -
系统 1 拿到令牌,去 sso 认证中心校验令牌是否有效 -
sso 认证中心校验令牌,返回有效,注册系统 1 -
系统 1 使用该令牌创建与用户的会话,称为局部会话,返回受保护资源 -
用户访问系统 2 的受保护资源 -
系统 2 发现用户未登录,跳转至 sso 认证中心,并将自己的地址作为参数 -
sso 认证中心发现用户已登录,跳转回系统 2 的地址,并附上令牌 -
系统 2 拿到令牌,去 sso 认证中心校验令牌是否有效 -
sso 认证中心校验令牌,返回有效,注册系统 2 -
系统 2 使用该令牌创建与用户的局部会话,返回受保护资源
用户登录成功之后,会与 sso 认证中心及各个子系统建立会话,用户与 sso 认证中心建立的会话称为全局会话,用户与各个子系统建立的会话称为局部会话,局部会话建立之后,用户访问子系统受保护资源将不再通过 sso 认证中心,全局会话与局部会话有如下约束关系
-
局部会话存在,全局会话一定存在 -
全局会话存在,局部会话不一定存在 -
全局会话销毁,局部会话必须销毁
sso 认证中心一直监听全局会话的状态,一旦全局会话销毁,监听器将通知所有注册系统执行注销操作

下面对上图简要说明
-
用户向系统 1 发起注销请求 -
系统 1 根据用户与系统 1 建立的会话 id 拿到令牌,向 sso 认证中心发起注销请求 -
sso 认证中心校验令牌有效,销毁全局会话,同时取出所有用此令牌注册的系统地址 -
sso 认证中心向所有注册系统发起注销请求 -
各注册系统接收 sso 认证中心的注销请求,销毁局部会话 -
sso 认证中心引导用户至登录页面
参考:
单点登录原理与实现 https://en.wikipedia.org/wiki/Single_sign-on#Common_configurations
后续推出了一些列的环境搭建及服务端、客户端的实现
最后给点个关注吧
关注 『Xiang想』公众号
作者介绍