# CAS

最近在整理单点登陆解决方案，整理一下。

## CAS 介绍

CAS是用于Web的企业多语言单点登录解决方案，它试图成为满足身份验证和授权需求的综合平台。 通俗来说，CAS是可以用来整合多套系统，并且完成统一用户身份认证。 在官方文档的介绍中，CAS包含下面的特点与技术

* Spring Webflow / Spring Boot Java服务器组件
* 插件式地身份验证支持(LDAP, Database, X.509, SPNEGO, JAAS, JWT, RADIUS, MongoDb,等等)
* 支持多种协议(CAS, SAML, WS-Federation, OAuth2, OpenID, OpenID Connect, REST)
* 支持多种服务提供方地多种因素身份验证(Duo Security, FIDO U2F, YubiKey, Google - Authenticator, Authy, Acceptto, 等)
* 支持委托给外部提供商地身份验证，如ADFS, Facebook, Twitter, SAML2 IdPs。
* 内置对密码管理，通知，使用条款和模拟的支持。
* 实时监控，与应用程序行为跟踪，统计信息与日志记录。
* 使用特定地身份验证策略管理和注册客户端应用与服务。
* 跨平台客户端支持Java, .Net, PHP, Perl, Apache。
* 与InCommon，Box，Office365，ServiceNow，Salesforce，Workday，WebAdvisor，Drupal，- Blackboard，Moodle，Google Apps等集成。

## CAS 架构

CAS 的架构图如下所示。

![CAS 架构图](/files/-MUwc-NEWVAqj2BdhABf)

### CAS Server

CAS 服务器是基于Spring 框架构建的 Java servlet 应用程序。主要职责是通过发行ticket来验证用户，并授予用户那些已经启用了CAS的服务的访问权限。当服务器在登录成功后向用户颁发ticket-granting ticket (TGT)时，将会建立一个SSO会话。应用户的请求，使用TGT作为令牌，通过浏览器重定向将service ticket (ST)发送给服务。随后，通过反向通道通信在CAS服务器上验证ST。

## CAS Client

CAS Client 通常包含两种不同的含义。

CAS客户端可以是通过支持的协议与服务器通信的任何启用CAS的应用程序。

CAS客户端也可以是一个软件包，可以与各种软件平台和应用程序集成在一起，以便通过某种身份验证协议（例如CAS，SAML，OAuth）与CAS服务器进行通信。

CAS Client 支持下面的平台与应用。 **平台**

* Apache httpd Server (mod\_auth\_cas module)
* Java (Java CAS Client)
* .NET (.NET CAS Client)
* PHP (phpCAS)
* Perl (PerlCAS)
* Python (pycas)
* Ruby (rubycas-client)

  **应用**
* Outlook Web Application (ClearPass + .NET CAS Client)
* Atlassian Confluence
* Atlassian JIRA
* Drupal
* Liferay
* uPortal

## CAS Client

客户端通过几种支持的协议与服务端进行通信。所有支持的协议在概念上是相近的。但是一些协议的特点使得他们适合在特定场景中应用。例如CAS协议支持委托(代理)认证，SAML协议支持属性释放和单点退出。

* CAS (versions 1, 2, and 3)
* SAML 1.1
* OpenID
* OAuth (1.0, 2.0)

## 实验环境架构

* CAS 6.4.0
* CAS Service Management 6.3.0
* Gitlab CE 13.8.2
* OpenLDAP
* openldap-2.4.44-20.el7.x86\_64
* tomcat 9.0.
* JDK 11.0

通过将 官方网站的图 简单的修改，我们构建出实验环境架构如下图所示。

![CAS 实验环境架构图](/files/-MUwc-NGOL9Xcr9wYfB4)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://www.selinux.tech/architecture/cas.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
