业务系统通过CAS(标准)协议接入IDaaS单点登录

最后更新:2021-12-02

1. CAS 原理

1.1. 概述

CAS (Central Authentication Service)中央认证服务。CAS(Central Authentication Service)是一款不错的针对 Web 应用的单点登录框架。

CAS 具有以下特点: 开源的企业级单点登录解决方案。 CAS Server 为需要独立部署的 Web 应用。 CAS Client 支持非常多的客户端(这里指单点登录系统中的各个 Web 应用),包括 Java, .Net, PHP, Perl, Apache, uPortal, Ruby 等。

注意:本文中的CAS(标准)协议是指CAS2.0协议

1.2. CAS 结构和协议

结构上: CAS 包含两部分

1.2.1. CAS Server

CAS Server 负责完成对用户的认证工作, CAS Server 需要独立部署,有不止一种 CAS Server 的实现。 CAS Server 会处理用户名 / 密码等凭证 (Credentials) ,它可能会到数据库检索一条用户帐号信息,也可能在 XML 文件中检索用户密码,对这种方式, CAS 均提供一种灵活但同一的接口 / 实现分离的方式, CAS 究竟是用何种认证方式,跟 CAS 协议是分离的,也就是,这个认证的实现细节可以自己定制和扩展。

1.2.2. CAS Client

CAS Client 负责部署在客户端(指 Web 应用),原则上, CAS Client 的部署意味着,当有对本地 Web 应用的受保护资源的访问请求,并且需要对请求方进行身份认证, Web 应用不再接受任何的用户名密码等类似的 Credentials ,而是重定向到 CAS Server 进行认证。 目前, CAS Client 支持(某些在完善中)非常多的客户端,包括 Java 、 .Net 、 ISAPI 、 Php 、 Perl 、 uPortal 、 Acegi 、 Ruby 、 VBScript 等客户端,几乎可以这样说, CAS 协议能够适合任何语言编写的客户端应用。

1.2.3. 协议

hodu5x_000.png
CAS Client 与受保护的客户端应用部署在一起,以 Filter 方式保护受保护的资源。

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

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

在该协议中,所有与 CAS 的交互均采用 SSL 协议,确保 ST 和 TGC 的安全性。协议工作过程中会有 2 次重定向的过程,但是 CAS Client 与 CAS Server 之间进行 Ticket 验证的过程对于用户是透明的。

1.3. CAS(标准)协议常用接口

CAS2.0协议采用XML进行认证,认证流程和CAS1.0总体一致,在认证的URI上有变化,并且CAS2.0提供了代理模式的认证(IDaaS暂未支持)。 IDaaS支持的CAS2.0主要提供的URI包括以下:

  • /login(GET)

  • /logout

  • /serviceValidate

1.3.1. /login (GET)

登录接口用于实现用户的身份认证。客户端向CAS服务器发送登录请求,CAS服务器返回一个票证(ticket),客户端使用该票证即可登录到目标应用系统。

参数:

名称

是否必须

备注

service

可选

service参数表示目标应用系统的URL地址,用于在登录成功后重定向到目标应用系统。如果省略该参数,则在登录成功后返回CAS服务默认页面。

示例:

https://server/cas/login?service=http%3A%2F%2Fwww.service.com

1.3.2. /logout

注销接口用于实现用户的退出操作。客户端向CAS服务器发送注销请求,CAS服务器删除当前用户的票证信息,从而实现用户的退出操作。

参数:

名称

是否必须

备注

service

可选

客户端尝试访问的应用的标识符。在几乎所有情况下,这将是应用的URL。请注意,作为一个HTTP请求的参数,此URL的值必须是符合RFC 中URL编码的描述。

1.3.3. /serviceValidate

验证接口用于实现票证的校验。客户端向CAS服务器发送票证校验请求,CAS服务器返回票证的状态,包括票证是否有效、票证对应的用户信息等。

参数:

名称

是否必须

备注

service

需要

客户端尝试访问的应用的标识符。在几乎所有情况下,这将是应用的URL。请注意,作为一个HTTP请求的参数,此URL的值必须是符合RFC 中URL编码的描述。

ticket

需要

ticket参数表示要进行验证的票证ID,由CAS服务器在用户登录成功后返回。客户端在向CAS服务器发送验证请求时,需要将ticket参数作为请求参数传递给CAS服务器,以便CAS服务器对票证进行验证。

response: / serviceValidate将返回一个格式化的CASserviceResponse XML。 验证成功:

<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>
    <cas:authenticationSuccess>
        <cas:user>username</cas:user>
    </cas:authenticationSuccess>
</cas:serviceResponse>

验证失败:

<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>
    <cas:authenticationFailure code="INVALID_TICKET">
        Ticket ST-1856339-aA5Yuvrxzpv8Tau1cYQ7 not recognized
    </cas:authenticationFailure>
</cas:serviceResponse>

2. 如何配置

2.1. IDaaS 中添加 CAS (标准)应用

CAS 标准应用目前只能由 IT 管理员 在应用添加菜单中添加。下面是 IT 管理员的应用添加流程。如果希望使用 CAS(标准)单点登录,可以请管理员进行协助添加和配置。
1、以IT管理员身份登录 IDaaS ,点击添加应用,找到 CAS (标准),点击 添加应用
sso_cas_standard_1.png
添加 CAS(标准)应用第 1 步

2、配置CAS应用
sso_cas_standard_2.png
添加 CAS(标准)应用第 2 步

CAS Client 也就是业务系统需要提供两个参数:
- ServiceNames:CAS Client 发起认证的URL地址。如有您有多个 CAS Client,直接换行添加即可。
- TargetUrl:IDaaS发起单点登录地址。
如果您的CAS Client 在内网,经过反向代理代理到外网。如果您的ServiceName参数值是自动获取的,有可能获取到的ServiceName值是内网的 IP 地址,需要您将ServiceName参数值写成固定的URL地址。

3、启动该应用,并查看该应用详情。
sso_cas_standard_3.png
添加 CAS (标准)应用第 3 步

4、点开查看应用详情后,主要注意 CAS Login URL 和 CAS Server URL Prefix 两个参数以便接下来在 CAS client里面配置使用。
sso_cas_standard_4.png
添加 CAS (标准)应用第 4 步

2.2. 在 CAS Client 中使用 CAS(标准)应用作为 CAS Server

1、CAS Client DEMO 程序下载地址:https://github.com/aliyun-idaas/idp4-application-cas-demo
2、修改 CAS Client 的配置信息,一般是修改 web.xml 文件。
引用jar包下载地址 : https://github.com/apereo/java-cas-client

3、修改 casServerLoginUrl 参数值,修改为 IDaaS 中创建的 CAS 应用的 CAS Login Url值。
CAS logout url 参数值配置也类似。如果您有使用到,直接复制粘贴IDaaS中CAS应用的CAS Logout URL即可。cas_sta_use_1.png
修改 CAS ServerLoginUrl

4、修改 casServerUrlPrefix参数值,修改为 IDaaS 中创建的 CAS 应用的 CAS validation URL Prefix值。
CAS票据校验地址的URI地址为 public 开头的,与上面的其他地址不一样。
cas_sta_use_2.png
修改 CAS ServerUrlPrefix

CAS validation URL Prefix 为 CAS 票据验证地址的前缀。CAS Client 请求 CAS server 验证 ticket 的完成 URL 请求为 {CAS validation URL Prefix}/serviceValidate?ticket=‘’&service=‘ServiceNames’。
更多的demo使用步骤,请参考demo程序的README.md 文档。

以上为标准CAS协议应用对接。