Skip to content

Keycloak

CaptchaLa 官方 Keycloak 外掛。無需撰寫任何程式碼,即可在 Keycloak 內建的登入、註冊與重設密碼頁面加上 CAPTCHA 驗證,並由伺服端驗證。以單一 provider JAR 部署,放入 Keycloak 即可使用。

涵蓋範圍

下列每一條流程皆以獨立的驗證步驟接入 —— 只保護您實際需要的頁面即可。

  • 瀏覽器登入(帳號密碼表單)
  • 自助式註冊
  • 重設密碼(「忘記密碼」頁面)

驗證挑戰預設以浮動小工具呈現(float),亦可切換為點擊後展開的彈出視窗(popup)。

安裝

1. 取得 JAR

外掛以開源形式發布: github.com/Captcha-La/captchala-keycloak。兩種方式:

  • 下載發行版(推薦)—— 從儲存庫的 Releases 頁面下載 keycloak-captchala-<version>.jar
  • 從原始碼建置 —— git clone 儲存庫後執行 mvn clean package;JAR 輸出至 target/

外掛需要 Keycloak ≥ 26(Quarkus)與 Java 17。

2. 部署外掛

bash
cp keycloak-captchala-1.0.0.jar /opt/keycloak/providers/
/opt/keycloak/bin/kc.sh build
# 重新啟動 Keycloak

接著設定登入主題:Realm settings → Themes → Login theme → captchala

3. 取得金鑰

dash.captcha.la 註冊帳號、建立一個應用,然後複製:

  • App Key —— 公開金鑰,會嵌入頁面中
  • App Secret —— 僅伺服端使用,由 Keycloak 簽發一次性 token 並呼叫 /v1/validate 時使用

4. 串接流程

在管理控制台中,將對應的 execution 加入您要保護的流程,再點擊齒輪圖示貼上 App KeyApp Secret

  • 瀏覽器登入 —— 複製 browser 流程,以 Captchala Username Password Form(REQUIRED)取代 Username Password Form,並綁定為 realm 的瀏覽器流程。
  • 註冊 —— 複製 registration 流程,在 registration-form 子流程中加入 Captchala Registration(REQUIRED),並綁定為 realm 的註冊流程。
  • 重設密碼 —— 複製 reset credentials 流程,以 Captchala Reset Credential (choose user)(REQUIRED)取代 Choose User,並綁定為 realm 的重設憑證流程。

在無痕視窗中開啟其中一個受保護的頁面,確認驗證挑戰能正常呈現。

設定項目

每個 execution 皆透過其齒輪圖示獨立設定。金鑰設定完畢後,預設值即可開箱即用。

設定項目Key預設值說明
App Keyapp.key來自 CaptchaLa 控制台的公開金鑰。必填。
App Secretapp.secret伺服端密鑰。必填。以遮罩方式儲存,永不暴露給瀏覽器。
API base URLapi.basehttps://apiv1.captcha.laCaptchaLa API 基礎位址。
Widget script URLscript.urlhttps://api.captcha.la/sdk/jslib/captchala.js小工具 JS 的載入位址。
Widget CSS URLcss.urlhttps://api.captcha.la/sdk/jslib/captchala.css小工具 CSS 的載入位址。
顯示模式productfloatfloat(浮動小工具)或 popup(彈出視窗)。
Action 標籤action依流程而定驗證時送出的 action 值(loginregisterreset)。
語言languagerealm 語系小工具語言;留空則跟隨 Keycloak 的 locale 設定。
失敗關閉fail.closedtrueCaptchaLa API 無法連線時拒絕提交。設為 off 可改為失敗放行。
使用伺服器 tokenuse.server.tokentrue在渲染時簽發一次性伺服器 token,強化防重放能力。

常見問題

外掛是免費的嗎?

是的。Keycloak 外掛免費且開源。CaptchaLa 免費方案包含每月 10,000 次驗證 —— 僅在需要更高用量時才會涉及付費方案。

支援哪些 Keycloak 版本?

Keycloak 26+ 的 Quarkus 發行版,以 Java 17 針對 26.5.6 版本建置。將 JAR 放入 providers/,執行 kc.sh build,然後重新啟動。

可以保護哪些頁面?

瀏覽器登入、自助式註冊以及重設密碼。每條流程皆獨立加入,可以只保護其中一條、兩條或全部三條。

App Secret 會暴露給瀏覽器嗎?

不會。密鑰以遮罩方式儲存,僅在 Keycloak 向 CaptchaLa API 發送請求時,透過 X-App-Secret 標頭傳遞,不會出現在任何頁面、範本或日誌中。每次挑戰皆使用一次性 token 驗證,因此已解的 token 無法被重放。

如果 CaptchaLa API 無法連線怎麼辦?

外掛預設為失敗關閉(提交被拒絕)。在任一 execution 上將 fail.closed 設為 off 可改為失敗放行 —— 適合灰度上線,不建議用於正式環境。

原始碼

MIT-licensed examples · CaptchaLa is operated independently