BookStack 在使用 AD 驗證後,還可以將角色與 AD 的群組做串接,以簡化群組成員異動的工作,不過在使用跟設定上,有些地方需要留意,雖然都是小問題,但我自己花了一兩周的時間才找出原因,因此整理出來分享。
依照官方說明,先將 .env 檔加入以下設定值:
# Enable LDAP group sync, Set to 'true' to enable. LDAP_USER_TO_GROUPS=true # LDAP user attribute containing groups, Defaults to 'memberOf'. LDAP_GROUP_ATTRIBUTE="memberOf" # Remove users from roles that don't match LDAP groups. LDAP_REMOVE_FROM_GROUPS=false
完成設定後,以下面環境為例設定:
AD / BookStack 帳號: test
BookStack 角色: test-bs-group
AD 群組: test-ad-group
在 BookStack 新增一個角色 “test-bs-group”,並在其「外部身份驗證ID」輸入 “test-ad-group”。
當 AD 中 ”test-ad-group” 成員 “test” 帳號登入 BoookStack 時,會自動將其帶進 “test-bs-group” 角色。
【注意】
◎ BookStack 的AD群組機制是把 BookStack 既有的角色跟 AD 群組串起來,而不是複製 AD 群組到 BookStack。
◎ AD 群組名稱可以包含底線 ”_” 或減 “-“,但不可以有空白,也不能是中文。
◎ AD 成員帳號若為 AD 群組的孫成員,一樣可以被帶進連結的角色 (子群組的名稱也不能有空白及中文)。
測試沒問題後,若希望 AD 在異動群組成員時,BookStack 能同步調整角色成員,請進行下列設定:
1. 在 AD 新增自定義管理者群組,例:BS_Admin。
2. 將 AD 管理者帳號 administrator 加入到 BS_Admin。
3. 修改 BookStack 的 Admin 角色,在「外部身份驗證ID」欄位輸入 BS_Admin。
4. 修改 .env,將 LDAP_REMOVE_FROM_GROUPS 改成 true。
【注意】
◎ 1~3的步驟要先進行,才能修改步驟4的值,否則 BookStack 的 admin 角色成員會被清空,造成沒有任何帳號有管理權限。
◎如不幸發生上述情形,需連進資料庫,修改 “roles” table ,將 admin 角色的 external_auth_id 欄位,輸入 AD 自定義的管理者群組名稱 (如 BS_Admin)。
【相關資料】
- v0.23.2 // (AD) LDAP & “Default user role”… also, multiple ldap_user_filter entries? · Issue #973 · BookStackApp/BookStack · GitHub
- how LDAP group sync works · Issue #1059 · BookStackApp/BookStack · GitHub