- 上一篇: CAS集群【3】 - 自定义主题
-
cas 脚手架: https://casinitializr.herokuapp.com/
Service 配置及管理
首先我们要明白CAS中的Service的概念是什么,
我们在第一节就讲解了在CAS系统中,主要分为三部分,
- User、
- Web应用、
- SSO认证中心。
User就是我们普通用户,Web应用就是需要接入 SSO
认证中心的应用也就是这里的Service,而SSO认证中心就是CAS服务端。
简单来说就是CAS分为 服务端 和 客户端 ,而S ervice
就是指具体的多个客户端(CAS Clients)。
- 而这里的 服务管理(Service Management) 就是:
CAS服务管理工具允许CAS服务器管理员声明和配置哪些服务(Service,CAS客户端)可以在哪些方面使用CAS。
服务管理工具的核心组件是服务注册表,它存储一个或多个注册服务。
接下来先介绍我们的第一个知识点——Service配置!
一、Service配置
我们刚刚提及到在CAS中,服务管理工具中的服务注册表当中存储着一个或多个注册服务,而这些Service中包含着各个行为的元数据,通过配置这些数据我们可以控制这些Service的 行为
。
主要 行为
包括一些几点:
- 授权服务 - 控制哪些服务可以参与CAS SSO会话。
- 强制身份验证 - 为强制身份验证提供管理控制。
- 属性发布 - 为服务提供用户详细信息以进行授权和个性化。
- 代理控制 - 通过授予/拒绝代理身份验证功能进一步限制授权服务。
- 主题控制 - 定义用于特定服务的备用CAS主题。
在 Service
中配置属性主要包括以下这些信息:
上图介绍了一些在Service中常用的配置项,对于各个配置属性的含义可以参考具体文档, 服务配置 。
在这些配置中,比较常使用的主要是:
-
服务访问策略——(
access Strategy
),具体可以查看: 服务策略配置。 -
服务属性配置——(
properties
),具体查看:服务属性配置。 -
服务到期政策——(
expirationPolicy
),具体查看:服务到期配置。
对CAS元数据的配置信息有了大致的了解后,我们需要配置其存储方式,,这里的Service存储方式提供了多种的解决方案。
推荐使用JSON、YAML、MongoDb、Redis、JPA这几种方式来存储使用,这里也将使用这几种方式来介绍。
1、JSON
这种方式也是CAS默认初始化使用的,注册表在应用程序上下文初始化时从JSON配置文件中读取服务定义,期望在配置的目录位置内找到JSON文件。
首先添加依赖包:
<dependency>
<groupId>org.apereo.cas</groupId>
<artifactId>cas-server-support-json-service-registry</artifactId>
<version>${cas.version}</version>
</dependency>
在 resources/services
文件夹下面新建 web-10000001.json
,具体内容如下:
{
"@class" : "org.apereo.cas.services.RegexRegisteredService",
"serviceId" : "^(https|imaps|http)://.*",
"name" : "web",
"id" : 10000001,
"evaluationOrder" : 10
}
注意: Json文件名字规则为 ${name}-${id}.json
,id必须为Json文件内容Json一致。
Json文件解释:
@class
:
必须为org.apereo.cas.services.RegisteredService
的实现类,对其他属性进行一个json
反射对象
常用的有RegexRegisteredService
,匹配策略为id
的正则表达式serviceId
:唯一的服务 id
name
: 服务名称,会显示在默认登录页id
:全局唯一标志 (需与文件名匹配)description
:服务描述,会显示在默认登录页evaluationOrder
: 匹配争取时的执行循序,最好是比1大的数字
因为在 CAS服务
中,默认是提供了默认的 Service配置项
,所以如果添加的 Json配置
没起作用,可以尝试注释掉默认启动 Json
,在 pom.xml
文件里面进行配置,
如下:
然后在配置文件application.properties下添加配置:
##
# Service Registry(服务注册)
#
# 开启识别Json文件,默认false
cas.serviceRegistry.initFromJson=true
#自动扫描服务配置,默认开启
#cas.serviceRegistry.watcherEnabled=true
#120秒扫描一遍
cas.serviceRegistry.schedule.repeatInterval=120000
#延迟15秒开启
# cas.serviceRegistry.schedule.startDelay=15000
##
# Json配置
cas.serviceRegistry.json.location=classpath:/services
启动服务,我们可以发现注释掉war包下Json初始化后,默认只启动了一个Json,在控制台中我们可以发现启动日志:
如果没有注释话,默认会是加载了2个服务配置。
输入具体地址https://sso.anumbrella.net:8443/cas/login?service=http://localhost:9080/sample,进行登录,输入用户名、密码登录成功!然后跳转到一个http://localhost:9080/sample?ticket=xxxxxxxxxxxxxx的地址。