Chuyển đến nội dung chính

第 3 課:管理控制台和建立第一個領域

熟悉管理控制台、建立第一個管理員使用者、建立和設定領域、領域設定(常規、登入、電子郵件、主題、在地化、金鑰、安全防禦)、管理 CLI (kcadm.sh) 和基本管理 REST API。

🔒 DevSecOps — 第 3 課 第 3 課:管理控制台和建立第一個領域

鑰匙斗篷從基礎到高級

第 1 部分:Keycloak 平台

亞洲開發網

1. 存取管理控制台

安裝Keycloak(單機或Docker)後,即可存取管理控制台— 整個 Keycloak 系統的集中管理介面。

造訪網址

預設情況下,管理控制台位於:

http://localhost:8080/admin

如果您使用具有不同連接埠對映的 Docker 執行 Keycloak:

http://localhost:<PORT>/admin

建立第一個管理員用戶

當你第一次造訪Keycloak時,你需要創建一個初始管理員用戶登入管理控制台。有兩種方法:

方法一:透過環境變數(建議用於Docker/Production)

docker run -d --name keycloak \
  -e KC_BOOTSTRAP_ADMIN_USERNAME=admin \
  -e KC_BOOTSTRAP_ADMIN_PASSWORD=admin \
  -p 8080:8080 \
  quay.io/keycloak/keycloak:26.2.4 start-dev

方法2:透過歡迎頁面(僅從本地主機造訪時)

使用權http://localhost:8080,您將看到管理員使用者建立表單。輸入使用者名稱和密碼,然後按一下創造.

方法3:透過命令列

# Standalone
export KC_BOOTSTRAP_ADMIN_USERNAME=admin
export KC_BOOTSTRAP_ADMIN_PASSWORD=admin
bin/kc.sh start-dev

管理控制台介面

登入後,您將看到管理控制台介面,其主要元件如下:

  • 領域選擇器(左上角)— 選擇您正在管理的領域

  • 左側邊欄— 主導航選單:用戶端、用戶端範圍、領域角色、使用者、群組、會話、事件、領域設定、身份驗證、身分提供者、使用者聯合

  • 主要內容區— 顯示所選項目的詳細內容

  • 用戶下拉選單(右上角) — 管理管理員帳戶,退出

2.建立第一個Realm

主域與自訂域

安裝Keycloak時,領域有一個名稱掌握。掌握預製的。主域是一個特殊的域,用來管理其他域—主領域不應用於應用程式.

最佳實踐:

  • 使用大師境界僅超級管理員可以管理Keycloak系統

  • 創造自訂領域特定於每個組織、專案或環境

  • 命名realm的含義是:我的公司開發, mycompany 分期, 我的公司產品

透過管理控制台創建領域

  1. 點選領域選擇器(左上角的下拉式選單,顯示“master”)

  2. 點選創建領域

  3. 輸入資訊:

    • 領域名稱: 我的公司(僅含小寫字母、數字、連字號)
    • 啟用: 在
  4. 點選創造

從 JSON 檔案建立 Realm

您可以從 JSON 檔案匯入領域 - 對於在環境之間複製配置很有用:

{
  "realm": "my-company",
  "enabled": true,
  "displayName": "My Company",
  "displayNameHtml": "<strong>My Company</strong>",
  "sslRequired": "external",
  "registrationAllowed": false,
  "loginWithEmailAllowed": true,
  "duplicateEmailsAllowed": false,
  "resetPasswordAllowed": true,
  "editUsernameAllowed": false,
  "bruteForceProtected": true,
  "permanentLockout": false,
  "maxFailureWaitSeconds": 900,
  "minimumQuickLoginWaitSeconds": 60,
  "waitIncrementSeconds": 60,
  "quickLoginCheckMilliSeconds": 1000,
  "maxDeltaTimeSeconds": 43200,
  "failureFactor": 5,
  "defaultSignatureAlgorithm": "RS256",
  "accessTokenLifespan": 300,
  "ssoSessionIdleTimeout": 1800,
  "ssoSessionMaxLifespan": 36000
}

透過管理控制台匯入:建立領域時,按一下瀏覽選擇 JSON 檔案。

3.領域設置詳細信息

創建realm後,訪問領域設定從側邊欄了解詳細配置。

3.1 常規選項卡

環境描述建議值
顯示名稱登入頁面顯示的名稱公司/專案名稱
HTML 顯示名稱HTML 對顯示名稱的支持標誌+名稱
前端網址用戶端用於連​​線的 URLhttps://auth.mycompany.com
需要 SSL請求需要 SSL外部的(開發)/全部(產品)
用戶管理的訪問允許使用者管理資源 (UMA)關閉(除非需要 UMA)
ACR 到 LoA 映射映射身份驗證上下文類別參考需要升級身份驗證時進行配置

3.2 登入選項卡

配置登入頁面的行為:

環境描述預設
用戶註冊允許新帳戶註冊離開
忘記密碼顯示連結“忘記密碼”離開
記住帳號複選框“記住登入”離開
電子郵件作為使用者名稱使用電子郵件作為使用者名稱離開
使用電子郵件登入允許透過電子郵件登入在
重複的電子郵件允許重複的電子郵件離開
驗證電子郵件需要電子郵件驗證離開
編輯使用者名稱允許更改使用者名稱離開

生產建議:

User registration: OFF (hoặc ON với reCAPTCHA)
Forgot password: ON
Remember me: ON
Email as username: Tùy yêu cầu
Login with email: ON
Verify email: ON
Edit username: OFF

3.3 電子郵件選項卡

設定 SMTP 伺服器發送電子郵件(驗證、密碼重設、通知):

環境描述
從發送電子郵件地址(例如[email protected])
來自顯示名稱電子郵件中顯示的姓名
大聲回覆回覆地址(例如 [email protected])
主持人SMTP 伺服器主機名
港口SMTP 連接埠(STARTTLS 為 587,SSL 為 465)
加密啟用 SSL 或 STARTTLS
驗證SMTP 的使用者名稱和密碼

Gmail SMTP 的設定範例:

Host: smtp.gmail.com
Port: 587
From: [email protected]
Enable StartTLS: ON
Authentication: ON
Username: [email protected]
Password: app-specific-password

3.4 主題選項卡

自訂不同頁面的外觀:

  • 登入主題— 登入、註冊、密碼重設頁面

  • 帳戶主題— 使用者的帳戶管理頁面

  • 管理控制台主題— 管理控制台介面

  • 電子郵件主題— 電子郵件模板

Keycloak提供主題鑰匙斗篷(預設)和鑰匙斗篷.v2(帳戶控制台 v3,基於 React)。您可以建立自訂主題 - 這將在下一篇文章中介紹。

3.5 本地化選項卡

登入、帳戶、電子郵件頁面的多語言支援:

  1. 打開國際化: 在

  2. 選擇支援的語言環境:en、vi、ja、zh-CN、...

  3. 選擇預設區域設定: vi (預設越南語介面)

  4. 如果需要,為每個區域設定自訂訊息包

3.6 選項卡鍵

管理領域的加密金鑰-用於簽署和加密令牌:

  • 活動鍵- 密鑰用於簽署令牌

  • 被動按鍵— 舊金鑰仍用於驗證先前簽署的令牌

  • 停用按鍵— 鑰匙不再使用

預設密鑰提供者:

提供者演算法目的
rsa 產生的RS256簽署 JWT 令牌
RSA-enc-生成RSA-OAEP加密令牌
hmac 產生的HS512HMAC 簽名
aes 產生的AES對稱加密
ecdsa 產生的ES256橢圓曲線簽名

密鑰輪換:新增新的金鑰提供者→新金鑰變成主動→舊金鑰變成被動→一段時間後停用舊金鑰。

3.7 代幣選項卡

配置令牌的生命週期和行為:

環境描述建議值
預設簽名演算法JWT 簽章演算法RS256
撤銷刷新令牌使用後撤銷刷新令牌開(生產)
SSO 會話空閒最大會話空閒時間30分鐘
SSO 最大會話數最大會話時間10點
訪問令牌的有效期訪問令牌的生命週期5分鐘
客戶端登入逾時登入流程最長時間5分鐘

3.8 安全防禦選項卡

領域的安全配置:

標題:

標頭預設值描述
X 框架選項同源防點擊劫持
內容安全策略框架-src'自我'; ...CSP頭
X-內容類型選項不聞防止 MIME 嗅探
X-XSS-保護1;模式=區塊XSS過濾器
嚴格的運輸安全最大年齡=31536000需要 HTTPS
推薦人政策無推薦人控制 Referrer 標頭

暴力檢測:

  • 啟用:ON(開啟防暴力破解)

  • 永久停工:關閉(到時間後自動解鎖)

  • 最大登入失敗次數:5(5次登入失敗後將被鎖定)

  • 等待增量:60秒(等待時間逐漸增加)

  • 最長等待時間:900秒(最長等待時間15分鐘)

  • 快速登入檢查:1000毫秒(偵測到登入速度太快)

4. 管理 CLI (kcadm.sh)

鑰匙斗篷提供管理CLI (kcadm.sh) — 無需存取管理控制台即可管理 Keycloak 的命令列工具。

4.1 配置憑證

在使用Admin CLI之前,您需要登入:

# Đăng nhập vào Keycloak server
bin/kcadm.sh config credentials \
  --server http://localhost:8080 \
  --realm master \
  --user admin \
  --password admin

Với Docker

docker exec -it keycloak /opt/keycloak/bin/kcadm.sh config credentials
--server http://localhost:8080
--realm master
--user admin
--password admin

安全說明:在生產、使用- 客戶和- 秘密而不是直接在命令列上輸入使用者名稱/密碼。

4.2 使用 CLI 進行領域管理

創建新領域:

# Tạo realm cơ bản
bin/kcadm.sh create realms \
  -s realm=my-company \
  -s enabled=true \
  -s displayName="My Company"

Tạo realm với nhiều cấu hình

bin/kcadm.sh create realms
-s realm=my-company
-s enabled=true
-s displayName="My Company"
-s registrationAllowed=false
-s loginWithEmailAllowed=true
-s resetPasswordAllowed=true
-s sslRequired=external
-s bruteForceProtected=true

查看領域列表:

# Lấy tất cả realms
bin/kcadm.sh get realms --fields realm,enabled,displayName

Output:

[ {

"realm" : "master",

"displayName" : "Keycloak",

"enabled" : true

}, {

"realm" : "my-company",

"displayName" : "My Company",

"enabled" : true

} ]

查看領域詳細資訊:

bin/kcadm.sh get realms/my-company

領域更新:

bin/kcadm.sh update realms/my-company \
  -s displayName="My Company Production" \
  -s sslRequired=all \
  -s bruteForceProtected=true \
  -s failureFactor=5

刪除領域:

bin/kcadm.sh delete realms/my-company

4.3 使用 CLI 配置領域設置

配置登入設定:

bin/kcadm.sh update realms/my-company \
  -s registrationAllowed=true \
  -s resetPasswordAllowed=true \
  -s rememberMe=true \
  -s verifyEmail=true \
  -s loginWithEmailAllowed=true \
  -s duplicateEmailsAllowed=false

配置令牌設定:

bin/kcadm.sh update realms/my-company \
  -s accessTokenLifespan=300 \
  -s ssoSessionIdleTimeout=1800 \
  -s ssoSessionMaxLifespan=36000 \
  -s revokeRefreshToken=true \
  -s refreshTokenMaxReuse=0

配置 SMTP 電子郵件:

bin/kcadm.sh update realms/my-company \
  -s 'smtpServer={"host":"smtp.gmail.com","port":"587","from":"[email protected]","fromDisplayName":"My Company","starttls":"true","auth":"true","user":"[email protected]","password":"app-password"}'

導出領域配置:

# Export realm sang file JSON
bin/kcadm.sh get realms/my-company > my-company-realm.json

5. 管理 REST API

鑰匙斗篷提供管理 REST API透過 HTTP 請求實現全面管理 - 非常適合自動化、CI/CD 以及與其他系統的整合。

5.1 取得訪問令牌

在呼叫 API 之前,您需要從 master 領域取得存取權杖:

# Lấy access token bằng admin credentials
ACCESS_TOKEN=$(curl -s -X POST \
  "http://localhost:8080/realms/master/protocol/openid-connect/token" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "username=admin" \
  -d "password=admin" \
  -d "grant_type=password" \
  -d "client_id=admin-cli" | jq -r '.access_token')

echo $ACCESS_TOKEN

5.2 使用 API 進行領域管理

取得領域列表:

curl -s -X GET \
  "http://localhost:8080/admin/realms" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" | jq '.[].realm'

創建新領域:

curl -s -X POST \
  "http://localhost:8080/admin/realms" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "realm": "my-company",
    "enabled": true,
    "displayName": "My Company",
    "sslRequired": "external",
    "registrationAllowed": false,
    "loginWithEmailAllowed": true,
    "resetPasswordAllowed": true,
    "bruteForceProtected": true,
    "failureFactor": 5
  }'

取得領域詳細資訊:

curl -s -X GET \
  "http://localhost:8080/admin/realms/my-company" \
  -H "Authorization: Bearer $ACCESS_TOKEN" | jq .

領域更新:

curl -s -X PUT \
  "http://localhost:8080/admin/realms/my-company" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "displayName": "My Company Updated",
    "sslRequired": "all"
  }'

刪除領域:

curl -s -X DELETE \
  "http://localhost:8080/admin/realms/my-company" \
  -H "Authorization: Bearer $ACCESS_TOKEN"

5.3 重要的API端點

端點方法描述
/管理/領域得到領域列表
/管理/領域郵政創造新境界
/管理/領域/{領域}得到領域詳細信息
/管理/領域/{領域}放更新領域
/管理/領域/{領域}刪除刪除領域
/管理/領域/{領域}/用戶得到使用者列表
/管理/領域/{領域}/用戶郵政創建用戶
/管理/領域/{領域}/客戶端得到客戶名單
/管理/領域/{領域}/角色得到領域角色列表
/管理/領域/{領域}/群組得到團體名單
/管理/領域/{領域}/事件得到事件日誌

5.4 使用郵差

Keycloak 為管理 REST API 提供 OpenAPI 規格。您可以匯入 Postman 或 Swagger UI 以輕鬆探索和測試 API:

# OpenAPI spec URL
http://localhost:8080/admin/realms/{realm}/.well-known/openid-configuration

6.練習練習

做以下練習來鞏固您的知識:

  1. 創建領域“dev-company”透過管理控制台進行設定:

    • 顯示名稱:“開發公司”
    • 使用電子郵件登入:開
    • 用戶註冊:開
    • 忘記密碼:開
    • 驗證電子郵件:開
    • 記住我:開
  2. 配置暴力偵測對於新創建的領域:

    • 最多登入失敗次數:3
    • 等待增量:120 秒
    • 最長等待時間:600 秒
  3. 使用 kcadm.sh建立具有類似配置的領域“staging-company”

  4. 使用管理 REST API(curl) 建立領域「test-company」並透過取得領域清單進行驗證

  5. 出口將領域“dev-company”轉換為 JSON 並使用不同的名稱重新導入

七、總結

在本課中,您學習了:

  • 如何存取和使用管理控制台

  • 創造管理員用戶首先透過多種方法

  • 建立並配置領域— Keycloak 中的主要管理單元

  • 了解領域設定重要:常規、登入、電子郵件、主題、本地化、金鑰、令牌、安全防禦

  • 使用管理CLI(kcadm.sh) 用於透過命令列進行管理

  • 使用管理 REST API自動化管理

下一篇文章將提供詳細說明管理使用者、群組和使用者設定檔在鑰匙斗篷裡。