前言
CAS 企业单点登录,目前最新版本是6.2.x 。
Apereo 的 Central Authentication Service,通常称为CAS。CAS是用于web的企业多语言单点登录解决方案,并试图成为满足您的身份验证和授权需求的综合平台。
CAS是一个开放的、文档完善的认证协议。该协议的主要实现是托管在这里的同名开源Java服务器组件,它支持大量额外的身份验证协议和特性。
以下内容概述了CAS项目的特点和技术:
- Spring Webflow/Spring Boot Java server component.
- Pluggable authentication support (LDAP, Database, X.509, SPNEGO, JAAS, JWT, RADIUS, MongoDb, etc)
- Support for multiple protocols (CAS, SAML, WS-Federation, OAuth2, OpenID, OpenID Connect, REST)
- Support for multifactor authentication via a variety of providers (Duo Security, FIDO U2F, YubiKey, Google Authenticator, Authy, Acceptto, etc.)
- Support for delegated authentication to external providers such as ADFS, Facebook, Twitter, SAML2 IdPs, etc.
- Built-in support for password management, notifications, terms of use and impersonation.
Support for attribute release including user consent. - Monitor and track application behavior, statistics and logs in real time.
- Manage and register client applications and services with specific authentication policies.
- Cross-platform client support (Java, .Net, PHP, Perl, Apache, etc).
- Integrations with InCommon, Box, Office365, ServiceNow, Salesforce, Workday, WebAdvisor, Drupal, Blackboard, Moodle, Google Apps, etc.
CAS体系结构(Architecture)
系统组件(System Components)
CAS服务端和客户端组成了CAS系统体系结构的两个物理组件,它们通过各种协议进行通信。
CAS服务端(CAS Server)
CAS服务端是构建在Spring框架上的Java servlet,它的主要职责是通过发出和验证票据来认证用户和授予对启用了CAS的服务(通常称为CAS客户端)的访问权。当服务端在用户成功登录时向其发出票据授予票据ticket-granting ticket(TGT)时,将创建一个SSO会话。服务票据service ticket(ST)是根据用户的请求通过浏览器重定向使用TGT作为令牌向服务发出的。随后,通过反向通道通信,在CAS服务器上验证ST。这些相互作用在CAS 协议文档中有详细的描述。
CAS客户端(CAS Clients)
术语“CAS Clients”在其常用用法中有两种不同的含义。一种是指任何支持cas的应用程序,它可以通过受支持的协议与服务器通信。另一种含义是一个软件包,它可以与各种软件平台和应用程序集成,以便通过一些认证协议(例如CAS、SAML、OAuth)与CAS服务器通信。它支持的平台如下:
- Apache httpd Server (mod_auth_cas module)
- Java (Java CAS Client)
- .NET (.NET CAS Client)
- PHP (phpCAS)
- Perl (PerlCAS)
- Python (pycas)
- Ruby (rubycas-client)
支持的协议(Supported Protocols)
客户端通过几种受支持的协议中的任何一种与服务器通信。所有受支持的协议在概念上是相似的,但是有些协议具有使其适合特定应用程序或用例的特性或特征。例如,CAS协议支持委托(代理)身份验证,SAML协议支持属性释放和单点签出。支持的协议如下:
- CAS (versions 1, 2, and 3)
- SAML 1.1 and 2
- OpenID Connect
- OpenID
- OAuth 2.0
- WS Federation
软件组件(Software Components)
用三个分层的子系统来描述CAS服务器是有好处的:
- Web (Spring MVC/Spring Webflow)
- Ticketing
- Authentication
几乎所有的部署考虑和组件配置都涉及到这三个子系统。Web层是与所有外部系统(包括CAS客户端)通信的端点。Web层委托票务(Ticketing)子系统为CAS客户端访问生成票务。SSO会话在成功的身份验证上开始TGT的签发,因此票据子系统经常委托给身份验证(Authentication)子系统。
Spring Framework
CAS使用了Spring框架的许多方面;最明显的是Spring MVC和Spring Webflow。Spring为核心CAS代码库和部署人员提供了一个完整的可扩展框架;通过连接CAS和Spring API扩展点,可以很容易地定制或扩展CAS行为。Spring的一般知识有助于理解一些框架组件之间的相互作用,但这并不是严格要求的。
Spring Boot
CAS还很大程度上基于Spring Boot,这使它能够对Spring平台和第三方库有自己的看法,从而创建一个独立的web应用程序,而不需要尽可能多地进行XML配置。Spring Boot允许CAS隐藏其组件及其配置的许多内部复杂性,而提供自动配置模块,这些模块可以简单地自动配置正在运行的应用程序上下文,而不需要太多的人工干预。
安装CAS Server
官网推荐使用WAR Overlay的方式来安装Cas Server。需求如下:
- JDK 11,推荐使用开源的OpenJDK,注意Oracle JDK需要付费
- Servlet 容器,推荐使用Tomcat 9.xx
- 构建工具,Gradle 6.x (可不用单独安装,软件中已自动提供)
- Git (可选)
开发工具推荐使用 IntelliJ IDEA,本系列文章演示的命令都是在windows下。
下载
git clone -b 6.2.1 https://github.com/apereo/cas-overlay-template.git
构建
使用 IntelliJ IDEA打开下载好的项目,使用如下命令构建:
gradlew clean build
解压并暴露出内部资源文件
gradlew explodeWar
添加模块
CAS模块可以在build.gradle文件的依赖项dependencies
块下指定。
dependencies {
compile "org.apereo.cas:cas-server-some-module:${project.casVersion}"
...
}
运行和部署
可执行WAR
gradlew run
gradlew debug
gradlew clean executable
部署在外部容器
将cas.war文件部署到一个Servelt容器如Tomcat。
Docker
gradlew build jibDockerBuild
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)