原文鏈接:https://mp.weixin.qq.com/s/yXSVbgkYIcJWPe4n2hSeUA原作者:macrozheng之前我們?cè)趯W(xué)習(xí)Oauth2的時(shí)候,需要通過(guò)寫(xiě)代碼來(lái)實(shí)現(xiàn)認(rèn)證授權(quán)服務(wù)。最近發(fā)現(xiàn)一款可視化的安全框架Keyc
原文鏈接:https://mp.weixin.qq.com/s/yXSVbgkYIcJWPe4n2hSeUA
原作者:macrozheng
之前我們?cè)趯W(xué)習(xí)Oauth2的時(shí)候,需要通過(guò)寫(xiě)代碼來(lái)實(shí)現(xiàn)認(rèn)證授權(quán)服務(wù)。最近發(fā)現(xiàn)一款可視化的安全框架Keycloak,只需幾個(gè)命令就可以快速搭建認(rèn)證授權(quán)服務(wù),無(wú)需自行開(kāi)發(fā)。原生支持SpringBoot,使用起來(lái)非常簡(jiǎn)單,推薦給大家!
簡(jiǎn)介
Keycloak是一款開(kāi)源的認(rèn)證授權(quán)平臺(tái),在Github上已有9.4k+Star。Keycloak功能眾多,可實(shí)現(xiàn)用戶(hù)注冊(cè)、社會(huì)化登錄、單點(diǎn)登錄、雙重認(rèn)證 、LDAP集成等功能。
安裝
使用Docker搭建Keycloak服務(wù)非常簡(jiǎn)單,兩個(gè)命令就完事了,我們將采用此種方式。
- 首先下載Keycloak的Docker鏡像,注意使用jboss的鏡像,官方鏡像不在DockerHub中;
docker pull jboss/keycloak:14.0.0
- 使用如下命令運(yùn)行Keycloak服務(wù):
docker run -p 8080:8080 --name keycloak -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin -d jboss/keycloak:14.0.0
- 運(yùn)行成功后可以通過(guò)如下地址訪問(wèn)Keycloak服務(wù),點(diǎn)擊圈出來(lái)的地方可以訪問(wèn)管理控制臺(tái),訪問(wèn)地址:http://192.168.7.142:8080

控制臺(tái)使用
接下來(lái)我們來(lái)體驗(yàn)下Keycloak的管理控制臺(tái),看看這個(gè)可視化安全框架有什么神奇的地方。
- 首先輸入我們的賬號(hào)密碼admin:admin進(jìn)行登錄;
- 登錄成功后進(jìn)入管理控制臺(tái),我們可以發(fā)現(xiàn)Keycloak是英文界面,良心的是它還支持多國(guó)語(yǔ)言(包括中文),只要將Themes->Default Locale改為zh-CN即可切換為中文;
- 修改完成后保存并刷新頁(yè)面,Keycloak控制臺(tái)就變成中文界面了;
- Keycloak非常良心的給很多屬性都添加了解釋?zhuān)疫€是中文的,基本看下解釋就可以知道如何使用了;
- 在我們開(kāi)始使用Keycloak保護(hù)應(yīng)用安全之前,我們得先創(chuàng)建一個(gè)領(lǐng)域(realm),領(lǐng)域相當(dāng)于租戶(hù)的概念,不同租戶(hù)之間數(shù)據(jù)相互隔離,這里我們創(chuàng)建一個(gè)macrozheng的領(lǐng)域;
- 接下來(lái)我們可以在macrozheng領(lǐng)域中去創(chuàng)建用戶(hù),創(chuàng)建一個(gè)macro用戶(hù);
- 之后我們編輯用戶(hù)的信息,在憑據(jù)下設(shè)置密碼;
- 創(chuàng)建完用戶(hù)之后,就可以登錄了,用戶(hù)和管理員的登錄地址并不相同,我們可以在客戶(hù)端頁(yè)面中查看到地址;
- 訪問(wèn)該地址后即可登錄,訪問(wèn)地址:http://192.168.7.142:8080/auth/realms/macrozheng/account
- 用戶(hù)登錄成功后即可查看并修改個(gè)人信息。
結(jié)合Oauth2使用
OAuth 2.0是用于授權(quán)的行業(yè)標(biāo)準(zhǔn)協(xié)議,在《Spring Cloud Security:Oauth2使用入門(mén)》一文中我們?cè)敿?xì)介紹了Oauth2的使用,當(dāng)然Keycloak也是支持的,下面我們通過(guò)調(diào)用接口的方式來(lái)體驗(yàn)下。
兩種常用的授權(quán)模式
我們?cè)倩仡櫹聝煞N常用的Oauth2授權(quán)模式。
授權(quán)碼模式
- (A)客戶(hù)端將用戶(hù)導(dǎo)向認(rèn)證服務(wù)器;
- (B)用戶(hù)在認(rèn)證服務(wù)器進(jìn)行登錄并授權(quán);
- (C)認(rèn)證服務(wù)器返回授權(quán)碼給客戶(hù)端;
- (D)客戶(hù)端通過(guò)授權(quán)碼和跳轉(zhuǎn)地址向認(rèn)證服務(wù)器獲取訪問(wèn)令牌;
- (E)認(rèn)證服務(wù)器發(fā)放訪問(wèn)令牌(有需要帶上刷新令牌)。
密碼模式
- (A)客戶(hù)端從用戶(hù)獲取用戶(hù)名和密碼;
- (B)客戶(hù)端通過(guò)用戶(hù)的用戶(hù)名和密碼訪問(wèn)認(rèn)證服務(wù)器;
- (C)認(rèn)證服務(wù)器返回訪問(wèn)令牌(有需要帶上刷新令牌)。
密碼模式體驗(yàn)
- 首先需要在Keycloak中創(chuàng)建客戶(hù)端mall-tiny-keycloak;
- 然后創(chuàng)建一個(gè)角色mall-tiny;
- 一切準(zhǔn)備就緒,在Postman中使用Oauth2的方式調(diào)用接口就可以獲取到Token了,獲取token的地址:http://192.168.7.142:8080/auth/realms/macrozheng/protocol/openid-connect/token
結(jié)合SpringBoot使用
接下來(lái)我們體驗(yàn)下使用Keycloak保護(hù)SpringBoot應(yīng)用的安全。由于Keycloak原生支持SpringBoot,所以使用起來(lái)還是很簡(jiǎn)單的。
- 由于我們的SpringBoot應(yīng)用將運(yùn)行在localhost:8088上面,我們需要對(duì)Keycloak的客戶(hù)端的有效的重定向URI進(jìn)行配置;
- 接下來(lái)我們需要修改應(yīng)用的pom.xml,集成Keycloak;
org.keycloak keycloak-spring-boot-starter 14.0.0
- 再修改應(yīng)用的配置文件application.yml,具體屬性參考注釋即可,需要注意的是給路徑綁定好可以訪問(wèn)的角色;
# Keycloak相關(guān)配置 keycloak: # 設(shè)置客戶(hù)端所在領(lǐng)域 realm: macrozheng # 設(shè)置Keycloak認(rèn)證服務(wù)訪問(wèn)路徑 auth-server-url: http://192.168.7.142:8080/auth # 設(shè)置客戶(hù)端ID resource: mall-tiny-keycloak # 設(shè)置為公開(kāi)客戶(hù)端,不需要秘鑰即可訪問(wèn) public-client: true # 配置角色與可訪問(wèn)路徑的對(duì)應(yīng)關(guān)系 security-constraints: - auth-roles: - mall-tiny security-collections: - patterns: - '/brand/*' - '/swagger-ui/*'
- 接下來(lái)訪問(wèn)下應(yīng)用的Swagger頁(yè)面,訪問(wèn)的時(shí)候會(huì)跳轉(zhuǎn)到Keycloak的控制臺(tái)去登錄,訪問(wèn)地址:http://localhost:8088/swagger-ui/
- 登錄成功后,即可訪問(wèn)被保護(hù)的Swagger頁(yè)面和API接口,一個(gè)很標(biāo)準(zhǔn)的Oauth2的授權(quán)碼模式,流程參考授權(quán)碼模式的說(shuō)明即可。
總結(jié)
Keycloak是一款非常不錯(cuò)的可視化安全框架,讓我們無(wú)需搭建認(rèn)證服務(wù)即可完成認(rèn)證和授權(quán)功能。原生支持SpringBoot,基本無(wú)需修改代碼即可集成,不愧為現(xiàn)代化的安全框架!
參考資料
- Keycloak官方文檔:https://www.keycloak.org/getting-started/getting-started-docker
- 保護(hù)SpringBoot應(yīng)用安全:https://www.keycloak.org/docs/latest/securing_apps/index.html#_spring_boot_adapter
項(xiàng)目源碼地址
https://github.com/macrozheng/mall-learning/tree/master/mall-tiny-keycloak