簡(jiǎn)介
cas客戶(hù)端
接入稱(chēng)之為service
,必須經(jīng)過(guò)cas的允許才能進(jìn)行登錄屹篓,當(dāng)然不同的客戶(hù)端可以做不同的事情,其中包括:
- 自定義主題(各客戶(hù)端登錄頁(yè)自定義)
- 自定義屬性(服務(wù)屬性(固定)與用戶(hù)屬性(動(dòng)態(tài)))
- 自定義協(xié)議
- 自定義登錄后跳轉(zhuǎn)方式匙奴,跳轉(zhuǎn)路徑
- 授權(quán)策略(拒絕屬性堆巧、可登錄時(shí)間范圍限制、等等)
- 拒絕授權(quán)模式
接下來(lái)來(lái)一個(gè)FAQ
A: 什么是service泼菌,根cas有什么關(guān)系谍肤?
B: service是使用型
, cas是服務(wù)型
,cas好比游樂(lè)園哗伯,service好比來(lái)游樂(lè)園的游客
A: 那service如何對(duì)接cas荒揣?service如何知道是否被允許接入?
B: 好比游客需要進(jìn)入游樂(lè)園焊刹,那么游客需要門(mén)票系任,獲取門(mén)票有多種方式,可以用手機(jī)校驗(yàn)碼虐块,或者身份證進(jìn)行獲取俩滥。當(dāng)然如果是犯罪分子門(mén)票都買(mǎi)不了,更何況進(jìn)去游樂(lè)園
A: 具體service如何作為客戶(hù)端使用贺奠?
B: 好比買(mǎi)門(mén)票霜旧,必須填寫(xiě)身份證號(hào)、手機(jī)號(hào)敞嗡、付款等流程颁糟,當(dāng)然也可以通過(guò)不同渠道購(gòu)買(mǎi),cas也有不同的客戶(hù)端實(shí)現(xiàn)喉悴,cas client棱貌、pac4j等
A: service接入有何好處?
B: 被接入的service無(wú)需進(jìn)行輸入密碼即可進(jìn)入系統(tǒng)箕肃,好比A-service(OA系統(tǒng))登錄了婚脱,B-service(賬單系統(tǒng)),C-service(CRM系統(tǒng))無(wú)需再次登錄勺像,傳統(tǒng)的方式有10個(gè)八個(gè)系統(tǒng)進(jìn)行登錄障贸,用戶(hù)會(huì)瘋掉,開(kāi)發(fā)員也需要管理多個(gè)系統(tǒng)的帳號(hào)數(shù)據(jù)
實(shí)戰(zhàn)
持久化策略:
- InMemory XML(通過(guò)spring bean進(jìn)行內(nèi)存存儲(chǔ))
- JSON(通過(guò)json文件存儲(chǔ)) 推薦 ???
- YAML(通過(guò)yml文件存儲(chǔ))
- Mongo(文檔數(shù)據(jù)庫(kù)持久化)推薦 ?????
- JPA(關(guān)系型數(shù)據(jù)庫(kù)持久化)
- DynameDb
- LDAP
- Cochbase
在sso初步上線時(shí)推薦采用json文件存儲(chǔ)吟宦,后面逐步多服務(wù)注入時(shí)推薦采用Mongo
進(jìn)行存儲(chǔ)篮洁,采用cas-management
進(jìn)行采用UI進(jìn)行管理我們的數(shù)據(jù),目前階段殃姓,持久化策略必須和cas進(jìn)行配置一致才能生效
本章進(jìn)行service的json配置及介紹袁波,下一章進(jìn)行cas-management配置
JSON 配置
需求:對(duì)所有http://localhost開(kāi)頭請(qǐng)求的service進(jìn)行允許認(rèn)證
在resources/services
下新建文件localhost-100001.json
{
"@class": "org.apereo.cas.services.RegexRegisteredService",
"serviceId": "^(http)://localhost.*",
"name": "本地服務(wù)",
"id": 100001,
"description": "這是一個(gè)本地允許的服務(wù)瓦阐,通過(guò)localhost訪問(wèn)都允許通過(guò)",
"evaluationOrder": 1
}
注意:
json文件名字規(guī)則為${name}-${id}.json
, id必須為json文件內(nèi)容id一致
json文件解釋?zhuān)?/strong>
- @class:必須為org.apereo.cas.services.RegisteredService的實(shí)現(xiàn)類(lèi),對(duì)其他屬性進(jìn)行一個(gè)json反射對(duì)象篷牌,常用的有RegexRegisteredService睡蟋,匹配策略為id的正則表達(dá)式
- serviceId:唯一的服務(wù)id
- name: 服務(wù)名稱(chēng),會(huì)顯示在默認(rèn)登錄頁(yè)
- id:全局唯一標(biāo)志
- description:服務(wù)描述枷颊,會(huì)顯示在默認(rèn)登錄頁(yè)
- evaluationOrder:確定已注冊(cè)服務(wù)的相對(duì)評(píng)估順序戳杀。當(dāng)兩個(gè)服務(wù)URL表達(dá)式覆蓋相同的服務(wù)時(shí),此標(biāo)志尤其重要;評(píng)估順序決定首先評(píng)估哪個(gè)注冊(cè)夭苗,并作為內(nèi)部排序因素信卡。
(越小越優(yōu)先)
除了以上說(shuō)的還有很多配置策略以及節(jié)點(diǎn),具體看官方文檔官方文檔
,配置不同的RegisteredService也會(huì)有稍微不一樣
啟用識(shí)別
上面新建了json文件cas還不知道要去識(shí)別json题造,需要打開(kāi)開(kāi)關(guān)
application.properties
#開(kāi)啟識(shí)別json文件坐求,默認(rèn)false
cas.serviceRegistry.initFromJson=true
#自動(dòng)掃描服務(wù)配置,默認(rèn)開(kāi)啟
#cas.serviceRegistry.watcherEnabled=true
#120秒掃描一遍
#cas.serviceRegistry.repeatInterval=120000
#延遲15秒開(kāi)啟
#cas.serviceRegistry.startDelay=15000
#默認(rèn)json/yml資源加載路徑為resources/services
#cas.serviceRegistry.config.location=classpath:/services
此中方式每次有新的service都需要添加對(duì)應(yīng)json文件晌梨,不方便維護(hù),cas為我們提供了對(duì)service的管理平臺(tái)须妻,通過(guò)UI界面進(jìn)行操作管理仔蝌。