keycloak

設定Keycloak v19串接Windows AD / LDAP

Keycloak與Windows AD / LDAP的關係

Keycloak作為一個開源的單點登入開源軟體,提供多種登入方式,包含SAML、OIDC亦或是串接第三方認證服務,如Google、Facebook等;而Windows AD (or LDAP)是一般企業最常使用的目錄管理工具,將員工的帳號、密碼及各種屬性存放在Windows AD (or LDAP)集中管理,尤其Windows AD還可以整合微軟各種辦公室生產力軟體,如Windows、Outlook、Teams…等。

Keycloak官方網站:Link

本篇的目標與架構

本篇分享如何整合Keycloak與Windows AD (or LDAP):

  1. Keycloak串接Windows AD (od LDAP),並將Keycloak作為Windows AD (or LDAP)的的代理(Proxy)服務
  2. 將Windows AD (or LDAP)的使用者與群組同步至Keycloak
keycloak windows ad ldap

環境準備:Windows AD群組與使用者的結構

Keyclaok

安裝詳見”安裝Keycloak v19提供身份認證與SSO服務“。

Windows AD

為了本篇範例,準備一個Windows AD,建立一個OU名為Jovepater,並增加群組與使用者,結構及關係圖如下:

windows ad ldap user group

設定Windows AD為Keycloak的認證服務

步驟1:登入Keycloak的Administration Console,新增一個Realm名為”WebUserRealm”。

步驟2:左側Menu處點選”Config” > “User Federation”,在”Add provider”處下拉選擇”LDAP”,畫面如下圖:

keycloak ldap user federation

步驟3:以下針對每個欄位說明 (順序依照畫面由上而下):

#欄位名稱說明本篇輸入範例
1Console Display Name本設定的名字ldap
2Priority當同一個Realm中有多個Provider時,Provider數字越小,表示越優先被使用0 (預設值)
3Import Users若選”On”,Windows AD中的使用者會被同步至Keycloak的資料庫中On (預設值)
4Edit Mode– READ_ONLY:從LDAP同步到Keycloak,在Keycloak不可更新數據
– WRITABLE:Keycloak與LDAP雙向同步
– UNSYNCED:從LDAP同步到Keycloak,在Keycloak可更新數據
READ_ONLY (預設值)
5Sync Registrations若選”On”,LDAP新增的User會即時同步到KeycloakOFF (預設值)
6Vendor提供目錄或認證的提供者Active Directory
7Username LDAP attribute所登入帳號的LDAP屬性,通常是cn或uidcn (預設值)
8RDN LDAP attribute對應到LDAP RDN屬性,通常是cncn (預設值)
9UUID LDAP attribute對應到LDAP UUID屬性,用於對應單一帳號,通常是objectGUIDobjectGUID (預設值)
10User Object Classes指定User的屬性,通常是person, organizationalPerson, userperson, organizationalPerson, user (預設值)
11Connection URLWindows AD (or LDAP)的網路位置,通常是ldap://開頭ldap://{IP or hostname}
12Users DN指定某個節點向下的所有物件,通常會指定一個OUOU=jovepater,DC=jovepater,DC=tw
13Custom User LDAP Filter 如果要過濾特別的屬性,可以在這個欄位指定
14Search Scope– One Level:只讀取Users DN同一層
– Subtree:讀取Users DN向下所有階層
Subtree
15Bind Type指定Windows AD (or LDAP)驗證方式,simple表示使用帳號/密碼simple
16Bind DN指定Windows AD (or LDAP)的驗證帳號CN=Administrator,CN=Users,DC=jovepater,DC=tw
17Bind CredentialWindows AD (or LDAP)驗證帳號的密碼************

步驟4:畫面右邊有”Test connection”與”Test authentication”,這兩個按鈕可以提供連接與驗證測試,都通過,即可點擊下方”Save”存檔,並再次點擊”Synchronize all users”來同步使用者到Keycloak。

設定同步LDAP物件的屬性

在Keycloak的LDAP設定中有一個”Mappers”選項 (如下圖),顧名思義就是對應LDAP物件的屬性,並將該屬性同步至Keycloak。

keycloka ldap mappers

系統已經預設了幾個一般而言最基本的屬性,包含姓、名、創建日期、異動日期等,接著我們以Email這個屬性來作為範例。

步驟1:依序”User Frederation” > “Ldap” > “LDAP Mappers”,點選右邊的”Create”,輸入:

  • Name:此處就命名為”email”
  • Mapper Type:選擇”user-attribute-ldap-mapper”

接著畫面上會展出對應的表單,如下圖:

keycloak ldap mapper user-attribute-ldap-mapper

步驟2:以下就每個欄位做說明,並附上範例參數:

#欄位名稱說明本篇輸入範例
1ID唯一的序號由系統自動產生
2Name設定的名字,同一個Provider內不可重複email
3Mapper TypeMapper類別user-attribute-ldap-mapper
4User Model Attribute同步至Keycloak的欄位名稱,可按需求自由設定email
5LDAP Attribute對應至LDAP的屬性mail
6Read OnlyON:只從LDAP同步而來
OFF:LDAP/Keycloak雙向同步
ON
7Always Read Value From LDAPON:讀取資訊時,永遠向LDAP詢問OFF
8Is Mandatory In LDAPON:該屬性在 LDAP 中是必需的,如果 Keycloak 中沒有值,則默認值或空值將被同步到 LDAPOFF
9Attribute default value當空值或null時,預設寫入的值空值
10Is Binary AttributeON:表示該值為True or FalseOFF

步驟3:回到”Ldap”設定畫面,點選下方”Synchronize all users”,若畫面顯示如下圖的示意,則代表同步成功了。

keycloak

步驟4:移至”Manage” > “Users”,若畫面空白,可以點選”View all users”,會列出所有從LDAP同步而來的帳號,如下圖:

Keycloak Users

可以看到,包含Email這個屬性都已經同步到Keycloak囉!

同步LDAP的群組與轄下User到Keycloak

步驟1:依序”User Frederation” > “Ldap” > “LDAP Mappers”,點選右邊的”Create”,輸入:

  • Name:此處就命名為”group”
  • Mapper Type:選擇”group-ldap-mapper”

接著畫面上會展出對應的表單,如下圖:

keycloak group-ldap-mapper

步驟2:以下就每個欄位做說明,並附上範例參數:

#欄位名稱說明本篇輸入範例
1ID唯一的序號由系統自動產生
2Name設定的名字,同一個Provider內不可重複group
3Mapper TypeMapper類別group-ldap-mapper
4LDAP Groups DNGroup的DNOU=jovepater,DC=jovepater,DC=tw
5Group Name LDAP AttributeGroup name的屬性欄位cn (預設值)
6Group Object Classes定義Group物件的類別,通常是”group”group (預設值)
7Preserve Group Inheritance是否保留LDAP中group的上下層關係ON (預設值)
8Ignore Missing Groups忽略遺失或有問題groupON
9Membership LDAP AttributeLDAP指定group的屬性欄位member
10Membership Attribute Type成員屬性欄位DN (預設值)
11Membership User LDAP Attribute成員在LDAP的屬性欄位cn (預設值)
12LDAP FilterLDAP的過濾器,可以透過LDAP語法來下條件(|(CN=WebAdmin)(CN=WebUser))
13Mode– LDAP_ONLY:無論如何都從LDAP查詢
– IMPORT:將Keycloak與LDAP資料合併存在Keycloak中
– READ_ONLY:將LDAP資料同步到Keycloak,並由Keycloak提供查詢
READ_ONLY
14User Groups Retrieve Strategy群組檢索策略LOAD_GROUP_BY_MEMBER_ATTRIBUTE
15Member-Of LDAP AttributeLDAP成員屬性memberOf
16Mapped Group Attributes映射到group的屬性空值 (預設值)
17Drop non-existing groups during sync同步期間刪除不存在的groupOFF
18Groups Pathgroup的路徑/ (預設值)

步驟3:表格填寫完畢後,儲存,並可以按下”Sync LDAP Groups To Keycloak”,若顯示成功,就可以到”Manage” > “Groups”查看group是否同步,如下圖:

keycloak groups

步驟4:點選”WebUser”群組,查看該群組的屬性,也可以點選頁簽”Members”,查看該group下的成員,如下圖:

keycloak groups members

以上就完成設定與同步LDAP Group與User到Keycloak了!

~ END ~

, ,

Related posts

Latest posts