Zone Lin
文章33
標籤32
分類7
設定 WikiJS 使用 Keyckoak 做身分認證

設定 WikiJS 使用 Keyckoak 做身分認證

最近在設定 WikiJS 串接 Keycloak 作身分認證時碰到一些問題,所以在這邊做個紀錄
這邊就跳過安裝過程

紀錄時使用版本: WikiJS 2.5.296 Keycloak 20.0.3

Keycloak 設定

挑選你要設定登入的 realm ,這邊我為了不要應用程式的帳號跟 Keycloak 的管理帳號混用,建一個新的 realm 叫做 demo

realm 像是用來管理帳號的群組,在這個群組內建好的應用方式都可以透過這些帳號登入

新增 client

creat

打上 client ID (不可重複) ,next 下一步
creat

這邊 Client authentication 必須要勾選,才會產生後面要用到的 Client Secret。點 Save 儲存
creat

設定 client

打開剛剛建好的 client wiki
下滑到 Access Setting
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 裡修改
setting

Credentials 分頁有後續會用到的 client key,可以先複製
setting

Wikijs 設定

進到設定後選認證 > 新增登入機制
wikijs

選擇 Keycloak
wikijs

再來填入你的 Keycloak 網址、realm 名稱跟剛剛建好的 Client ID
wikijs

下面4個網址可以參考 wikijs 的提示,不過左邊的 /auth 要去掉,例如:

wikij 提示
https://KEYCLOAK-HOST/auth/realms/YOUR-REALM/protocol/openid-connect/auth

左邊的 /auth 去掉,範例的 realms 是 demo
https://your.keycloak-host.com/realms/demo/protocol/openid-connect/auth

Client Secret 貼上 Keycloak Credentials 內複製的金鑰
wikijs

開放自由註冊可以斟酌打開,若沒開沒登入過的帳號會無法登入
wikijs

最下面可以取得 keycloak 設定需要的 Valid rediect URI
只需要填 /login/a28088b1-8e47-4d16-aa6f-0a32d8af192f/callback
wikijs

設定完記得卷到上面點套用設定
wikijs


問題排除

登出時遇到 invalid parameter redirect_uri

invalid parameter redirect_uri

keycloak 在 18 版之後就不支援登出時使用redirect_uri參數,所以只能先暫時先把 WikiJS 的同步登出先關閉,等 WikiJS 更新
WikiJS sync logout

關閉後的缺點是在同一台裝置,session 未過期前,點一下 keycloak 登入就會自動登進去

本文作者:Zone Lin
本文連結:https://zonego.tw/2023/02/10/wikijs-keyckoak/
版權宣告:本文採用 創用CC BY 4.0 協議進行許可
貼文內使用的封面圖大部分來自unsplash,個別圖片的連結請看封面圖來源
×