CAS新版本(6.0-RC4)使用介绍(一)

  1. 新版本CAS介绍(6..0-RC4)

 

    1. 简介

Central Authentication Service (CAS),通常称为CAS。 CAS是一种针对Web的企业多语言单点登录解决方案,并尝试成为您的身份验证和授权需求的综合平台。

下面是CAS(6.0.X)官方的一段简述:

  • Spring Webflow/Spring Boot Java server component.
  • 可拔插认证支持 (LDAP, Database, X.509, SPNEGO, JAAS, JWT, RADIUS, MongoDb, etc)
  • 多种协议支持 (CAS, SAML, WS-Federation, OAuth2, OpenID, OpenID Connect, REST)
  • 通过各种提供商支持多因素身份验证 (Duo Security, FIDO U2F, YubiKey, Google Authenticator, Microsoft Azure, Authy etc)
  • 支持外部提供者的委托认证,例如: 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.
  • 实时监控和跟踪应用程序行为,统计信息和日志。
  • 用特定的认证策略管理和注册客户端应用程序和服务。
  • 跨平台的客户端支持 (Java, .Net, PHP, Perl, Apache, etc).
  • Integrations with InCommon, Box, Office365, ServiceNow, Salesforce, Workday, WebAdvisor, Drupal, Blackboard, Moodle, Google Apps, etc.

相较于老版本CAS(4.1.7),新版本CAS增加了更丰富的功能支持。

以下将分别从CAS的构建、单点登录(登出)、高可用架构、密码管理、OAuth认证、服务管理、个性化登录界面、多因素认证等方面进行详细介绍。

 

    1. CAS服务构建

目前CAS官方发布的为源码,需要由个人进行构建生成war包。CAS服务可以通过两种方式进行构建:一种是通过CAS源码进行编译、打包;一种是通过官方提供的cas-overlay-template工程来构建war包。由于目前CAS的支持功能较多,针对不同需求需要添加不同的support包,建议采用官方建议的cas-overlay-template方式进行构建。旧版本CAS采用Maven进行管理,新版本已经采用了Gradle进行管理。因此,构建新版本的CAS时,需要添加Gradle的支持。本文档采用cas-overlay-template进行构建,此种构建方式的优势在于通过配置文件增添support包、制定CAS版本即可进行构建,无需自主下载CAS源码。

 

注意:

  • CAS新版本(6.0.x+)使用的是JDK11进行构建。因此,生产使用时也需要注意版权问题,可以考虑采用Open JDK 11代替。本例中使用的jdk版本为:openjdk version "11.0.2"。
  • 本例采用的数据库为MySQL5.7,在使用数据库配置连接数据库时,数据库连接方言需要使用如下配置:org.hibernate.dialect.MySQL57InnoDBDialect,否则可能出现报错。

 

      1. 工程构建
  1. CAS相关代码均可在https://github.com/apereo进行下载。CAS-Overlay-Template工程目前无release版本,可以直接下载master分支代码。

git clone https://github.com/apereo/cas-overlay-template.git

 

  1. 由于国内网络受限,因此在工程下载后,需要调整仓库地址,用以进行仓库构建。修改

cas-overlay-template-master/build.gradle文件,增加阿里云Maven仓库地址:

 

 

  1. 修改cas-overlay-template-master/gradle.properties文件,指定构建CAS服务的版本:

 

  1. 导入工程,本例中采用eclipse,因此需要安装gradle相关插件:

 

 

 

  1. 导入工程后,访问cas-overlay-template-master/src/main/resources/application.properties文件,修改CAS服务配置信息(若没有配置文件,可以自主创建或者先生成war包,再从war对应路径拷贝)。本例中主要配置,均在此文件中进行配置,也可以针对不同的配置拆分成不同的配置文件进行单独配置。

 

 

  1. 通过gradle tasks面板进行服务构建。若该页签无任务,可以尝试刷新。

 

 

  1. 构建完成的工程,将会生成在cas-overlay-template-master/build/libs路径下。

 

 

  1. 将此工程发布至Tomcat,即可通过web界面进行访问,http://ip:port/cas。

 

 

 

    1. 单点登录(登出)

单点登录、单点登出是CAS的核心功能,主要用于用户的认证。CAS默认提供从本地json获取用户认证数据,默认用户名及密码为casuser/Mellon。目前认证的方式支持LDAP、Database、X.509、SPNEGO、JAAS、JWT、RADIUS、MongoDb等多种方式。本例中,将采用MySQL数据库作为认证数据存储的方式。因此,需要创建数据库、数据库表,数据库表至少包含username、password或类似功能字段。用户表中password字段支持多种加密方式,包含:NONE、DEFAULT、STANDARD、BCRYPT、SCRYPT、PBKDF2、自定义(需要额外编码)等多种加密方式。本例采用DEFAULT MD5对password进行加密。

 

      1. 工作原理

CAS的认知支持多种协议,包含:CAS, SAML, WS-Federation, OAuth2, OpenID, OpenID Connect, REST等。默认采用的为CAS协议,目前CAS协议有1.0、2.0、3.0三个版本。本例将以最常用的CAS 2.0协议为基础进行原理的介绍。

 

以上为官方提供的单点登录时序图,分为以下三种场景:应用首次登录、应用再次登录、应用2首次登录。主要原理是通过url的重定向、cookie、session等功能来实现用户认证。

关于前后分离应用的单点登录,其认证方式与独立服务认证方式略有不同,需要通过validate来进行用户认证,调用过程参考下图:

 

 

 

关于单点登出,默认CAS服务也支持单点登出。在某一个应用登出后,会将CAS Server端的TGT删除,同时CAS Server会向对应TGT验证的其他应用发起logout请求。整理需要注意,CAS Server仅会发送logout请求,应用拦截到logout后,需要自己完善用户的logout逻辑,用以实现用户登出。其原理参考下图:

 

 

      1. 工程构建
  1. 使用MySQL作为认证数据源,需要在cas-overlay-template-master/build.gradle文件中增加以下配置信息,用以支持数据库认证。

 

 

  1. 修改cas-overlay-template-master/src/main/resources/application.properties文件中增加以下配置信息,用以支持数据库认证以及字段加密。

 

其中cas.authn.jdbc.query[0].sql属性用以配置通过用户名查询密码的sql,cas.authn.jdbc.query[0].fieldPassword属性用以指定密码字段。cas.authn.jdbc.query[0].passwordEncoder相关属性用以指定密码字段的加密方式。

 

  1. 通过gradle tasks面板构建并发布服务。访问CAS服务界面,可以通过MySQL数据库中保存的用户名和密码进行登录。

 

 

      1. 单点登录(登出)配置

 

  1. CAS的服务接入单点登录,具有权限限制,此处样例已经设置接入授权。关于接入授权将会在【服务管理】章节详细说明。目前仅确保tomcat发布路径webapps/cas/WEB-INF/classes/services/下,具有HTTPSandIMAPS-10000001.json此文件(若没有可以创建),文件内容如下:

 

 

  1. 通过配置CAS的客户端,能够实现应用服务的单点登录功能。主要配置属性包含应用服务自身登录、登出url,CAS服务的登录、登出rul。不同应用可能配置方式不同,参考样例如下:

 

 

      1. 单点登录样例

 

  1. APP1登录:

 

 

  1. APP1登录成功:

 

 

  1. APP2登录,直接进入登录界面:

 

 

      1. 单点登出样例
  1. 参考上例结束,APP1、APP2均已登录,直接进入APP1登录界面,选择登出:

 

 

  1. 在APP2已登录界面进行刷新:

 

你可能感兴趣的:(CAS,单点登录)