一、简介
cas客户端接入称之为service,必须经过cas的允许才能进行登录,当然不同的客户端可以做不同的事情,其中包括:
自定义主题(各客户端登录页自定义)
自定义属性(服务属性(固定)与用户属性(动态))
自定义协议
自定义登录后跳转方式,跳转路径
授权策略(拒绝属性、可登录时间范围限制、等等)
拒绝授权模式
A: 什么是service,根cas有什么关系? B: service是使用型cas是服务型,cas好比游乐园,service好比来游乐园的游客 A: 那service如何对接cas?service如何知道是否被允许接入? B: 好比游客需要进入游乐园,那么游客需要门票,获取门票有多种方式,可以用手机校验码,或者身份证进行获取。当然如果是犯罪分子门票都买不了,更何况进去游乐园 A: 具体service如何作为客户端使用? B: 好比买门票,必须填写身份证号、手机号、付款等流程,当然也可以通过不同渠道购买,cas也有不同的客户端实现,cas client、pac4j等 A: service接入有何好处? B: 被接入的service无需进行输入密码即可进入系统,好比A-service(OA系统)登录了,B-service(账单系统),C-service(CRM系统)无需再次登录,传统的方式有10个八个系统进行登录,用户会疯掉,开发员也需要管理多个系统的帐号数据
二、实战
持久化策略:
InMemory XML(通过spring bean进行内存存储)
JSON(通过json文件存储)
YAML(通过yml文件存储)
Mongo(文档数据库持久化)
JPA(关系型数据库持久化)
DynameDb
LDAP
Cochbase
在sso初步上线时推荐采用json文件存储,后面逐步多服务注入时推荐采用Mongo进行存储,采用cas-management进行采用UI进行管理我们的数据,目前阶段,持久化策略必须和cas进行配置一致才能生效
本章进行service的json配置及介绍,yml文件格式配置,参考文档:https://apereo.github.io/cas/5.2.x/installation/YAML-Service-Management.html
三、JSON 配置
需求:对所有http://localhost
开头请求的service进行允许认证
在resources/services
下新建文件Localhost-10000002.json
{ "@class": "org.apereo.cas.services.RegexRegisteredService", "serviceId": "^(http)://localhost.*", "name": "本地服务", "id": 10000002, "description": "这是一个本地允许的服务,通过localhost访问都允许通过", "evaluationOrder": 1 }
注意:json文件名字规则为${name}-${id}.json,id必须为json文件内容id一致
json文件解释:
@class
:必须为org.apereo.cas.services.RegisteredService
的实现类,对其他属性进行一个json反射对象,常用的有RegexRegisteredService
,匹配策略为id的正则表达式serviceId
:唯一的服务idname
: 服务名称,会显示在默认登录页id
:全局唯一标志description
:服务描述,会显示在默认登录页evaluationOrder
: 匹配争取时的执行循序(越小越优先)theme
:主题,默认是apereo
除了以上说的还有很多配置策略以及节点,具体看官方文档,配置不同的RegisteredService也会有稍微不一样
四、启用识别
上面新建了json文件cas还不知道要去识别json,需要打开开关.
application.properties
#开启识别json文件,默认false cas.serviceRegistry.initFromJson=true #自动扫描服务配置,默认开启 #cas.serviceRegistry.watcherEnabled=true #120秒扫描一遍 #cas.serviceRegistry.repeatInterval=120000 #延迟15秒开启 #cas.serviceRegistry.startDelay=15000 #默认json/yml资源加载路径为resources/services #cas.serviceRegistry.config.location=classpath:/services
另外还需要在 pom.xml 文件中加入依赖配置
<!--json服务注册--> <dependency> <groupId>org.apereo.cas</groupId> <artifactId>cas-server-support-json-service-registry</artifactId> <version>${cas.version}</version> </dependency>
配置完成后启动cas,观察到如下打印,表示json服务注册起作用了
后续增加介绍,将service该用数据库方式获取。请关注
参考文档
https://apereo.github.io/cas/5.2.x/installation/Service-Management.html
https://apereo.github.io/cas/5.2.x/installation/JSON-Service-Management.html
https://apereo.github.io/cas/5.2.x/installation/Configuration-Properties.html#service-registry