設定 WikiJS 使用 Keyckoak 做身分認證
最近在設定 WikiJS 串接 Keycloak 作身分認證時碰到一些問題,所以在這邊做個紀錄
這邊就跳過安裝過程
紀錄時使用版本: WikiJS 2.5.296
Keycloak 20.0.3
Keycloak 設定
挑選你要設定登入的 realm ,這邊我為了不要應用程式的帳號跟 Keycloak 的管理帳號混用,建一個新的 realm 叫做 demo
realm 像是用來管理帳號的群組,在這個群組內建好的應用方式都可以透過這些帳號登入
新增 client
打上 client ID (不可重複) ,next 下一步
這邊 Client authentication 必須要勾選,才會產生後面要用到的 Client Secret。點 Save 儲存
設定 client
打開剛剛建好的 client wiki
下滑到 Access Setting
假設我們的 wikijs 網址是 https://wiki.example.com
填入URL | 說明 | |
---|---|---|
Root URL | https://wiki.example.com | 網站根網址 |
Home URL | https://wiki.example.com | 登入後重導向的根網址 (通常跟 root url 相同) |
Valid rediect URIs | /XXXXXXXX/callback /* |
允許重導向頁面網址 用 * 可以代表所有頁面,但要注意安全性 |
Valid post logout | https://wiki.example.com | 允許登出後轉向的頁面 |
redirect URIs | /* | 允許登出後的重導向位置 |
Web origins | 允許 CORS origins 的網址 |
Valid rediect URIs
可以在後面設定 wikijs 時取得
如果你的 Keycloak 有安裝客製主題,可以在 Login settings 裡修改
Credentials 分頁有後續會用到的 client key,可以先複製
Wikijs 設定
進到設定後選認證 > 新增登入機制
選擇 Keycloak
再來填入你的 Keycloak 網址、realm 名稱跟剛剛建好的 Client ID
下面4個網址可以參考 wikijs 的提示,不過左邊的 /auth
要去掉,例如:
|
Client Secret 貼上 Keycloak Credentials 內複製的金鑰
開放自由註冊可以斟酌打開,若沒開沒登入過的帳號會無法登入
最下面可以取得 keycloak 設定需要的 Valid rediect URI
只需要填 /login/a28088b1-8e47-4d16-aa6f-0a32d8af192f/callback
設定完記得卷到上面點套用設定
問題排除
登出時遇到 invalid parameter redirect_uri
keycloak 在 18 版之後就不支援登出時使用redirect_uri
參數,所以只能先暫時先把 WikiJS 的同步登出先關閉,等 WikiJS 更新
關閉後的缺點是在同一台裝置,session 未過期前,點一下 keycloak 登入就會自動登進去