目錄
- Github
- Keycloak介紹
- Keycloak配置
- Spring Security集成Keycloak
- 啟動(dòng)Keycloak客戶(hù)端
- SSO授權(quán)碼模式訪(fǎng)問(wèn)過(guò)程
- 總結(jié)
在企業(yè)眾多的應(yīng)用系統(tǒng)中恐似,如果每個(gè)應(yīng)用都有獨(dú)立的用戶(hù)認(rèn)證和權(quán)限管理利凑,這不僅需要維護(hù)多套用戶(hù)管理系統(tǒng),用戶(hù)使用每個(gè)系統(tǒng)也非常的不便捏浊。如果能夠?qū)⑺袘?yīng)用系統(tǒng)的用戶(hù)集中管理僚碎,用戶(hù)使用一套用戶(hù)名登錄所有系統(tǒng)震桶,將會(huì)大大改善用戶(hù)體驗(yàn)。下面將基于Keycloak搭建單點(diǎn)登錄系統(tǒng)克婶。
GitHub
Keycloak介紹
Keycloak是為現(xiàn)代應(yīng)用和服務(wù)提供了開(kāi)源IAM(Identity and Access Management)解決方案扇丛。下面簡(jiǎn)單的介紹幾種功能:
- SSO
通過(guò)Keycloak處理用戶(hù)認(rèn)證术吗,意味著你的應(yīng)用不需要處理登錄界面,認(rèn)證用戶(hù)晕拆,存儲(chǔ)用戶(hù)信息。一旦登錄Keycloak, 用戶(hù)不需要再次登錄Keycloak管理下的其它應(yīng)用材蹬。實(shí)現(xiàn)一次登錄实幕,多處登錄不同應(yīng)用,一處登出堤器,所有應(yīng)用登出昆庇。 -
Identity Brokering and Social Login
Keycloak通過(guò)配置,可實(shí)現(xiàn)對(duì)不同身份認(rèn)證服務(wù)的集成闸溃,通過(guò)這些身份認(rèn)證服務(wù)登錄應(yīng)用整吆。
-
User Federation
在企業(yè)系統(tǒng)中有使用LDAP/AD管理用戶(hù),同樣辉川,Keycloak 提供了對(duì)LDAP/AD的集成方案表蝙,可以方便的同步用戶(hù)。
- Client Adapters
Keycloak提供了不同平臺(tái)多種語(yǔ)言的支持乓旗,支持標(biāo)準(zhǔn)的OpenID Connect, OAuth 2.0, and SAML等府蛇。 -
后臺(tái)管理
Keycloak不僅提供了后臺(tái)管理界面,同時(shí)還有CLI屿愚,和RESTFul API方式管理后臺(tái)汇跨。
- 集群方案
Keycloak Setup
-
創(chuàng)建Client: login-app, login-backup
-
創(chuàng)建client Roles
-
創(chuàng)建用戶(hù), 并分配角色
如果需要獲取所有用戶(hù)信息务荆,配置realm-management
- 啟動(dòng)Keycloak standalone 模式,端口號(hào)為8180
如果需要配置連接postgresql穷遂,請(qǐng)參考Github./standalone.sh -Djboss.socket.binding.port-offset=100
Spring Security集成Keycloak
- 配置application.properties
其中keycloak.resource根據(jù)不同的client配置不同的變量函匕,內(nèi)容請(qǐng)參考Keycloak client installation,如下圖keycloak.realm=demo keycloak.resource=login-app keycloak.auth-server-url=http://localhost:8180/auth keycloak.ssl-required=external keycloak.public-client=true keycloak.use-resource-role-mappings=true keycloak.confidential-port=0 keycloak.principal-attribute=preferred_username
啟動(dòng)Keycloak客戶(hù)端
- 啟動(dòng)client: login-app, login-backup蚪黑,端口號(hào)分別為8081盅惜,8082,在keycloak client 配置頁(yè)面 ‘Valid Redirect URIs’ 填寫(xiě)相應(yīng)的端口號(hào)
java -Dserver.port=8081 -jar login-app.jar java -Dserver.port=8082 -jar login-backup.jar
SSO授權(quán)碼模式訪(fǎng)問(wèn)過(guò)程
- 訪(fǎng)問(wèn)login-app祠锣,圖中http://rp.example.com酷窥,當(dāng)瀏覽器登錄Keycloak(OP)后,會(huì)在瀏覽器保存KEYCLOAK_SESSION
- 當(dāng)訪(fǎng)問(wèn)login-backup時(shí)伴网,圖中http://rp-2.example.com蓬推,瀏覽器將KEYCLOAK_SESSION一起請(qǐng)求Keycloak(OP), Keycloak(OP)根據(jù)KEYCLOAK_SESSION判斷用戶(hù)已登錄,直接授權(quán)澡腾,不需要用戶(hù)再次輸入用戶(hù)名和密碼沸伏。
-
登錄login-app頁(yè)面跳轉(zhuǎn),包的抓取
總結(jié)
- keycloak有對(duì)應(yīng)的單點(diǎn)登出动分,通過(guò)postman請(qǐng)求測(cè)試
- 集成LDAP毅糟,測(cè)試可進(jìn)行連接,用戶(hù)屬性Map澜公,并可選擇用戶(hù)數(shù)據(jù)同步方式
- 使用keycloak docker時(shí)偶爾不能獲取client role, 沒(méi)有解決
- 使用keycloak docker時(shí)不能獲取用戶(hù)列表, 沒(méi)有解決姆另,即使配置了相應(yīng)的獲取權(quán)限
- keycloak session沒(méi)有持久化的postgresql數(shù)據(jù)庫(kù)中,沒(méi)有解決