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

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