HTMLTAG_67__HTMLTAG_68___1。使用者聯盟 — 概述___HTMLTAG_69__HTMLTAG_70
使用者聯合允許 Keycloak 連線到外部使用者資料庫,例如 LDAP、Active Directory 或自訂資料庫。您可以直接從外部來源進行身份驗證,而不必將所有使用者匯入 Keycloak。
要設定使用者聯合,請前往 管理控制台 → 使用者聯合.
___HTMLTAG_79__HTMLTAG_80___1.1 為什麼我們需要使用者聯合? HTMLTAG_81__HTMLTAG_82
___HTMLTAG_85__HTMLTAG_86___原因____HTMLTAG_87__HTMLTAG_88___說明____HTMLTAG_89__HTMLTAG_90___ ___HTMLTAG_93__HTMLTAG_94__HTMLTAG_95___集中使用者管理___HTMLTAG_96__HTMLTAG_97__HTMLTAG_98___LDAP/AD已是企業主要使用者來源→無須重複____HTMLTAG_99__HTMLTAG_100___ ___HTMLTAG_101__HTMLTAG_102__HTMLTAG_103___保留目前系統___HTMLTAG_104__HTMLTAG_105__HTMLTAG_106___無需將使用者移轉到Keycloak____HTMLTAG_107__HTMLTAG_108___ ___HTMLTAG_109__HTMLTAG_110__HTMLTAG_111___單一事實來源___HTMLTAG_112__HTMLTAG_113__HTMLTAG_114___使用者資料僅存在於一處,避免不一致____HTMLTAG_115__HTMLTAG_116___ ___HTMLTAG_117__HTMLTAG_118__HTMLTAG_119___Kerberos SSO___HTMLTAG_120__HTMLTAG_121__HTMLTAG_122___從 Active Directory 整合 Kerberos 驗證____HTMLTAG_123__4MLG_123__4MLG_123__4MLG_123__4MLG_123__12HTMLTAG_127__HTMLTAG_128___1.2 聯合提供者的類型___HTMLTAG_129__HTMLTAG_130
___HTMLTAG_133__HTMLTAG_134___提供者____HTMLTAG_135__HTMLTAG_136___說明___HTMLTAG_137__HTMLTAG_138___ ___HTMLTAG_141__HTMLTAG_142__HTMLTAG_143____LDAP___HTMLTAG_144__HTMLTAG_145__HTMLTAG_146___支援 OpenLDAP、389 目錄伺服器和 LDAP 相容伺服器____HTMLTAG_1478HTML ___HTMLTAG_149__HTMLTAG_150__HTMLTAG_151___Active Directory___HTMLTAG_152__HTMLTAG_153__HTMLTAG_154___Microsoft Active Directory(使用 LDAP 協定 + AD 特定映射器)___HTMLTAG_155HTMLTAG_156 ___HTMLTAG_157__HTMLTAG_158__HTMLTAG_159____SSSD___HTMLTAG_160__HTMLTAG_161__HTMLTAG_162____系統安全服務守護程序 — FreeIPA/Red Hat IdM 整合_ML ___HTMLTAG_165__HTMLTAG_166__HTMLTAG_167___自訂使用者儲存 SPI___HTMLTAG_168__HTMLTAG_169__HTMLTAG_170___編寫您自己的提供者以連接任何資料庫____HTMLTAG_171__HTMLTAG_172___HTMLTAG_175__HTMLTAG_176___2。新增 LDAP 供應商___HTMLTAG_177__HTMLTAG_178
前往 管理控制台 → 使用者聯合 → 新增 LDAP 提供者.
HTMLTAG_183__HTMLTAG_184___2.1 常規選項___HTMLTAG_185__HTMLTAG_186
___HTMLTAG_189__HTMLTAG_190___設定___HTMLTAG_191__HTMLTAG_192___說明____HTMLTAG_193__HTMLTAG_194___範本值____HTMLTAG_195__HTMLTAG_196___ ___HTMLTAG_199__HTMLTAG_200__HTMLTAG_201___控制台顯示名稱___HTMLTAG_202__HTMLTAG_203__HTMLTAG_204___管理控制台上顯示的名稱____HTMLTAG_205__HTMLTAG_204___管理控制台上顯示的名稱____HTMLTAG_205__HTMLTAG_206__7MLG_206__7MLG_206__7ML LDAP___HTMLTAG_208__HTMLTAG_209__HTMLTAG_210___ ___HTMLTAG_211__HTMLTAG_212__HTMLTAG_213___優先權___HTMLTAG_214__HTMLTAG_215__HTMLTAG_216___有多個提供者時的優先順序____HTMLTAG_217__HTMLTAG_218__HTMLTAG_219____0(最高)___HTMLTAG_221__HTMLTAG_222___ ___HTMLTAG_223__HTMLTAG_224__HTMLTAG_225___已啟用___HTMLTAG_226__HTMLTAG_227__HTMLTAG_228___啟用/禁用提供者___HTMLTAG_229__HTMLTAG_230__HTMLTAG_231___ON___HTMLTAG_232__HTMLTAG_233__HTMLTAG_234___ ___HTMLTAG_235__HTMLTAG_236__HTMLTAG_237___導入使用者___HTMLTAG_238__HTMLTAG_239__HTMLTAG_240___將 LDAP 使用者匯入 Keycloak本地資料庫___HTMLTAG_241__HTMLTAG_242__HTMLTAG_243___ON___HTMLTAG_244__HTMLTAG_245__HTMLTAG_246___HTMLTAG_249__HTMLTAG_250___2.2 連線設定___HTMLTAG_251__HTMLTAG_252
預編碼_0
___HTMLTAG_253__HTMLTAG_254___連線池設定:HTMLTAG_255__HTMLTAG_256
___HTMLTAG_259__HTMLTAG_260___設定___HTMLTAG_261__HTMLTAG_262___說明____HTMLTAG_263__HTMLTAG_264___預設____HTMLTAG_265__HTMLTAG_266___ ___HTMLTAG_269__HTMLTAG_270__HTMLTAG_271___連線池___HTMLTAG_272__HTMLTAG_273__HTMLTAG_274___開啟連接池以最佳化效能___HTMLTAG_275__HTMLTAG_276__HTMLTAG_277___ON___HTMLTAG_278__HTMLTAG_279__HTMLTAG_280___ ___HTMLTAG_281__HTMLTAG_282__HTMLTAG_283___連線池驗證___HTMLTAG_284__HTMLTAG_285__HTMLTAG_286___經過驗證的連線池___HTMLTAG_287__HTMLTAG_288__HTMLTAG_289___簡單___HTMLTAG_290__HTMLTAG_291__HTMLTAG_292___ ___HTMLTAG_293__HTMLTAG_294__HTMLTAG_295___連線池偵錯___HTMLTAG_296__HTMLTAG_297__HTMLTAG_298___連線池的日誌偵錯___HTMLTAG_299__HTMLTAG_300__HTMLTAG_301___OFF___HTMLTAG_302__HTMLTAG_303__HTMLTAG_304___ ___HTMLTAG_305__HTMLTAG_306__HTMLTAG_307___連線池初始大小___HTMLTAG_308__HTMLTAG_309__HTMLTAG_310___頂部初始連接數___HTMLTAG_311__HTMLTAG_312__HTMLTAG_313___1___HTMLTAG_314__HTMLTAG_315__HTMLTAG_316___ ___HTMLTAG_317__HTMLTAG_318__HTMLTAG_319___連接池最大大小___HTMLTAG_320__HTMLTAG_321__HTMLTAG_322___最大連線數___HTMLTAG_323__HTMLTAG_324__HTMLTAG_325___1000___HTMLTAG_326__HTMLTAG_327__HTMLTAG_328___ ___HTMLTAG_329__HTMLTAG_330__HTMLTAG_331___連線池逾時___HTMLTAG_332__HTMLTAG_333__HTMLTAG_334___從池取得連線超時___HTMLTAG_335__HTMLTAG_336__HTMLTAG_337___30000女士___HTMLTAG_339__HTMLTAG_340___HTMLTAG_343__HTMLTAG_344___2.3 SSL/LDAPS 設定___HTMLTAG_345__HTMLTAG_346
要連接到LDAPS(連接埠636),您需要將CA憑證匯入Keycloak信任庫:
預編碼_1
使用信任程式庫設定Keycloak:
預編碼_2
HTMLTAG_351__HTMLTAG_352___2.4 使用 StartTLS___HTMLTAG_353__HTMLTAG_354
您可以在連接埠 389 上使用 StartTLS,而不是 LDAPS(連接埠 636):
預編碼_3
StartTLS 將常規 LDAP 連線升級為同一連接埠 389 上的加密連線.
HTMLTAG_361__HTMLTAG_362___3。 LDAP 搜尋設定___HTMLTAG_363__HTMLTAG_364
___HTMLTAG_367__HTMLTAG_368___設定___HTMLTAG_369__HTMLTAG_370___說明___HTMLTAG_371__HTMLTAG_372___範本值___HTMLTAG_373__HTMLTAG_374___ ___HTMLTAG_377__HTMLTAG_378__HTMLTAG_379___使用者 DN___HTMLTAG_380__HTMLTAG_381__HTMLTAG_382___Keycloak 搜尋的基本DN用戶___HTMLTAG_383__HTMLTAG_384__HTMLTAG_385___ou=人員,dc=範例,dc=com___HTMLTAG_386__HTMLTAG_387__HTMLTAG_388___ ___HTMLTAG_389__HTMLTAG_390__HTMLTAG_391___使用者物件類別___HTMLTAG_392__HTMLTAG_393__HTMLTAG_394___使用者項目的LDAP物件類別___HTMLT AG_395__HTMLTAG_396__HTMLTAG_397___inetOrgPerson、organizationalPerson___HTMLTAG_398__HTMLTAG_399__HTMLTAG_400___ ___HTMLTAG_401__HTMLTAG_402__HTMLTAG_403___使用者名稱 LDAP 屬性___HTMLTAG_404__HTMLTAG_405__HTMLTAG_406___LDAP 屬性包含使用者名稱___HTMLTAG_407__HTMLTAGMLTA_408HTLDAP 屬性包含______sAMAccountName(AD)___HTMLTAG_413__HTMLTAG_414___
___HTMLTAG_415__HTMLTAG_416__HTMLTAG_417___RDN LDAP 屬性___HTMLTAG_418__HTMLTAG_419__HTMLTAG_420___用於 RDN(相對可分辨名稱)的屬性_____HTMLTAG_421__MLTAG_ML4142G14241_421__414U421__414U421__4U4U421__414U421__42G1421__414U421__414U421__414U421__414U421__414U421__4U4U421__4UU4421__4UU42124U4U421124U4211202G (LDAP) / cn(西元)___HTMLTAG_427__HTMLTAG_428___
___HTMLTAG_429__HTMLTAG_430__HTMLTAG_431___UUID LDAP 屬性___HTMLTAG_432__HTMLTAG_433__HTMLTAG_434___被用作唯一 ID 的屬性HTMLTAGMLTA_436HT___V (LDAP) / objectGUID(AD)___HTMLTAG_441__HTMLTAG_442___
___HTMLTAG_443__HTMLTAG_444__HTMLTAG_445___搜尋範圍___HTMLTAG_446__HTMLTAG_447__HTMLTAG_448__HTMLTAG_449___一級_或子樹___HTMLTAG_452__HTMLTAG_453__HTMLTAG_454__HTMLTAG_455___子樹___HTMLTAG_456__HTMLTAG_457__HTMLTAG_458___
___HTMLTAG_459__HTMLTAG_460__HTMLTAG_461___自訂使用者 LDAP 過濾器___HTMLTAG_462__HTMLTAG_463__HTMLTAG_464___要過濾的 LDAP附加過濾器使用者___HTMLTAG_465__HTMLTAG_466__HTMLTAG_467___(&(objectClass=person)(memberOf=cn=app-users,ou=Groups,dc=example,dc=com))___HTMLTAG_468__HTTAG_468__4ML
___HTMLTAG_471__HTMLTAG_472__HTMLTAG_473___讀取逾時___HTMLTAG_474__HTMLTAG_475__HTMLTAG_476___LDAP 讀取操作逾時___HTMLTAG_477__HTMLTAG_476___LDAP 讀取操作逾時___HTMLTAG_477__HTMLTAG_478_____4G_478__4000___毫秒___HTMLTAG_481__HTMLTAG_482___
HTMLTAG_485__HTMLTAG_486___3.1 Active Directory 設定___HTMLTAG_487__HTMLTAG_488
選擇 Vendor = Active Directory 時,Keycloak 會自動設定適當的值:
預編碼_4
HTMLTAG_493__HTMLTAG_494___4。儲存模式___HTMLTAG_495__HTMLTAG_496
Keycloak 支援 3 種儲存模式,這些模式決定了 Keycloak 如何與 LDAP 互動:
___HTMLTAG_501__HTMLTAG_502___模式____HTMLTAG_503__HTMLTAG_504___從 LDAP 讀取___HTMLTAG_505__HTMLTAG_506___寫回 LDAP___HTMLTAG_507__HTMLTAG_cloak DB___HTMLTAG_509__HTMLTAG_510___使用案例___HTMLTAG_511__HTMLTAG_512___
___HTMLTAG_515__HTMLTAG_516__HTMLTAG_517___唯讀___HTMLTAG_518__HTMLTAG_519__HTMLTAG_520___✅___HT MLTAG_521__HTMLTAG_522___❌___HTMLTAG_523__HTMLTAG_524___✅(快取)___HTMLTAG_525__HTMLTAG_526___LDAP是唯一的來源,不允許使用者透過 Keycloak 更改資訊___HTMLTAG_527__HTMLTAG_528___
___HTMLTAG_529__HTMLTAG_530__HTMLTAG_531___可寫___HTMLTAG_532__HTMLTAG_533__HTMLTAG_534__ _✅___HTMLTAG_535__HTMLTAG_536___✅___HTMLTAG_537__HTMLTAG_538___✅___HTMLTAG_539__HTMLTAG_540___用於允許使用者變更資訊(密碼、設定檔)並寫回 LD341TAGML_FAP42____
___HTMLTAG_543__HTMLTAG_544__HTMLTAG_545___未同步___HTMLTAG_546__HTMLTAG_547__HTMLTAG_548___ ✅___HTMLTAG_549__HTMLTAG_550___❌___HTMLTAG_551__HTMLTAG_552____✅___HTMLTAG_553__HTMLTAG_554___從下列位置匯入使用者LDAP,然後僅在寫入 ___MLak 中_____
HTMLTAG_559__HTMLTAG_560___4.1 編輯模式___HTMLTAG_561__HTMLTAG_562
編輯模式規格使用者或管理員變更資訊時的行為:
預編碼_5
HTMLTAG_565__HTMLTAG_566___5。同步設定___HTMLTAG_567__HTMLTAG_568
Keycloak 可以透過 2 種機制從 LDAP 同步使用者:
HTMLTAG_571__HTMLTAG_572___5.1 定期完全同步___HTMLTAG_573__HTMLTAG_574
預編碼_6
HTMLTAG_575__HTMLTAG_576___5.2 定期變更使用者同步___HTMLTAG_577__HTMLTAG_578
預編碼_7
HTMLTAG_579__HTMLTAG_580___5.3 手動同步___HTMLTAG_581__HTMLTAG_582
您可以從管理控制台或透過 CLI 手動觸發同步:
預編碼_8
HTMLTAG_585__HTMLTAG_586___6。 LDAP 映射器___HTMLTAG_587__HTMLTAG_588
LDAP 映射器定義 Keycloak 如何 將 LDAP 屬性對應到 Keycloak 使用者模型。這是配置 LDAP 聯合時最重要的部分。
HTMLTAG_593__HTMLTAG_594___6.1 使用者屬性 LDAP 映射器___HTMLTAG_595__HTMLTAG_596
將 LDAP 屬性對應到 Keycloak 使用者屬性:
預編碼_9
自動產生的預設映射器:
___HTMLTAG_603__HTMLTAG_604___映射器名稱____HTMLTAG_605__HTMLTAG_606___LDAP 屬性___HTMLTAG_607__HTMLTAG_608___Keycloak 屬性___HTMLTAG_609__HTMLTAG_610___
___HTMLTAG_613__HTMLTAG_614___使用者名稱___HTMLTAG_615__HTMLTAG_616__HTMLTAG_617___uid / sAMAccountName___HTMLTAG_620__HTMLTAG_621__HTMLTAG_622__HTMLTAG_623___使用者名稱___HTMLTAG_624__HTMLTAG_625__HTMLTAG_626___
___HTMLTAG_627__HTMLTAG_628___電子郵件___HTMLTAG_629__HTMLTAG_630__HTMLTAG_631___郵件___HTMLTAG_632_ _____HTMLTAG_633__HTMLTAG_634__HTMLTAG_635___電子郵件___HTMLTAG_636__HTMLTAG_637__HTMLTAG_638___
___HTMLTAG_639__HTMLTAG_640___名字___HTMLTAG_641__HTMLTAG_642__HTMLTAG_643___名字 / cn___HTMLTAG_647__HTMLTAG_648__HTMLTAG_649___名字___HTMLTAG_650__HTMLTAG_651__HTMLTAG_652___
___HTMLTAG_653__HTMLTAG_654___姓氏___HTMLTAG_655__HTMLTAG_656__HTMLTAG_657___sn___HTMLTAG_658__HTMLTAG_659__HTMLTAG_660__HTMLTAG_658__HTMLTAG_659__HTMLTAG_660__HTMLTAG_658__HTMLTAG_659__HTMLTAG_660__HTMLTAG_661____MLTAGMLTA162____
___HTMLTAG_665__HTMLTAG_666___建立日期___HTMLTAG_667__HTMLTAG_668__HTMLTAG_669___建立時間戳___HTMLTAG_ 670__HTMLTAG_671__HTMLTAG_672__HTMLTAG_673____建立時間戳___HTMLTAG_674__HTMLTAG_675__HTMLTAG_676___
___HTMLTAG_677__HTMLTAG_678___修改日期___HTMLTAG_679__HTMLTAG_680__HTMLTAG_681___修改時間戳___HTMLTAG_ 682__HTMLTAG_683__HTMLTAG_684__HTMLTAG_685___修改時間戳___HTMLTAG_686__HTMLTAG_687__HTMLTAG_688___
HTMLTAG_691__HTMLTAG_692___6.2 全名 LDAP 映射器___HTMLTAG_693__HTMLTAG_694
將 LDAP cn(通用名稱)對應到 Keycloak firstName + lastName___MLG___MLTAG_699___ + lastName___MLG____7070____7____
預編碼_10
當 LDAP 僅具有 cn 而不分隔 givenName/sn___HTMLTAG_709_707___/sn_HT____
HTMLTAG_711__HTMLTAG_712___6.3 群組 LDAP 映射器___HTMLTAG_713__HTMLTAG_714
將 LDAP 群組同步到 Keycloak 群組:
Mapper Type: group-ldap-mapper
LDAP Groups DN: ou=Groups,dc=example,dc=com
Group Name LDAP Attribute: cn
Group Object Classes: groupOfNames
Membership LDAP Attribute: member
Membership Attribute Type: DN
Membership User LDAP Attribute: uid
Mode: READ_ONLY
User Groups Retrieve Strategy: LOAD_GROUPS_BY_MEMBER_ATTRIBUTE
Drop non-existing groups during sync: false
Groups Path: /
___HTMLTAG_717__HTMLTAG_718___使用者群組擷取策略選項:HTMLTAG_719__HTMLTAG_720
___HTMLTAG_723__HTMLTAG_724___策略____HTMLTAG_725__HTMLTAG_726___說明___HTMLTAG_727__HTMLTAG_728___
___HTMLTAG_731__HTMLTAG_732__HTMLTAG_733___LOAD_GROUPS_BY_MEMBER_ATTRIBUTE___HTMLTAG_734__HTMLTAG_735__HTMLTAG_736___根據成員屬性從 LDAP 載入組___
___HTMLTAG_739__HTMLTAG_740__HTMLTAG_741___GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE___HTMLTAG_742__HTMLTAG_743__HTMLTAG_744______MLTAG_742__HTMLTAG_743__HTMLTAG_744_______MLTAG_742__HTMLTAG_743__HTMLTAG_744_______MLTAMLTAMLTA14U4177414U____ML屬性___HTMLTAG_747__HTMLTAG_748___
___HTMLTAG_749__HTMLTAG_750__HTMLTAG_751___LOAD_GROUPS_BY_MEMBER_ATTRIBUTE_RECURSIVELY___HTMLTAG_752__HTMLTAG_753__HTMLTAG_754______MLTAG_752__HTMLTAG_753__HTMLTAG_754______MLTAG_752__HTMLTAG_753__HTMLTAG_754______MLTAG_752__HTMLTAG_753__HTMLTAG_754______MLTAG_752__HTMLTAG_753__HTMLTAG_754___________________
___HTMLTAG_759__HTMLTAG_760___6.4 角色 LDAP 映射器___HTMLTAG_761__HTMLTAG_762___
將 LDAP 角色/群組同步到 Keycloak 領域角色:
Mapper Type: role-ldap-mapper
LDAP Roles DN: ou=Roles,dc=example,dc=com
Role Name LDAP Attribute: cn
Role Object Classes: groupOfNames
Membership LDAP Attribute: member
Membership Attribute Type: DN
Membership User LDAP Attribute: uid
Mode: READ_ONLY
Use Realm Roles Mapping: true
Client ID: (để trống nếu dùng realm roles)
HTMLTAG_765__HTMLTAG_766___6.5 硬編碼-ldap-角色映射器___HTMLTAG_767__HTMLTAG_768
自動將固定角色指派給 LDAP 供應商的 所有 使用者:
Mapper Type: hardcoded-ldap-role-mapper
Role: realm-role-name
# Hoặc client role:
Role: client-id.client-role-name
當您想要使用角色標記來區分 LDAP 使用者和本機使用者時很有用。
HTMLTAG_775__HTMLTAG_776___6.6 msad-使用者帳號控制映射器___HTMLTAG_777__HTMLTAG_778
用於 Active Directory 的特殊映射器,處理 userAccountControl 屬性:
___
Mapper Type: msad-user-account-control-mapper
# Xử lý:
# - Account enabled/disabled status
# - Password expired status
# - Account locked status
# - Require user to change password at next login
此映射器讀取 AD 的位元遮罩 userAccountControl 以對應到 Keycloak 使用者狀態:
___HTMLTAG_791__HTMLTAG_792___AD 標誌(位元)___HTMLTAG_793__HTMLTAG_794___Keycloak 行為___HTMLTAG_795__HTMLTAG_796___
___HTMLTAG_799__HTMLTAG_800__HTMLTAG_801___ACCOUNTDISABLE (0x0002)____HTMLTAG_803__HTMLTAG_804___使用者在 Keycloak 中被停用____HTMLTAG_805__16805_________
___HTMLTAG_807__HTMLTAG_808__HTMLTAG_809___鎖定 (0x0010)___HTMLTAG_811__HTMLTAG_812___使用者已鎖定___HTMLTAG_813__HTMLTAG_814___
___HTMLTAG_815__HTMLTAG_816__HTMLTAG_817___PASSWORD_EXPIRED___HTMLTAG_818__HTMLTAG_819__HTMLTAG_820___使用者登入時必須變更密碼____HTMLTAG_821__HTMLTAG_822___
HTMLTAG_825__HTMLTAG_826___6.7 憑證-ldap-映射器___HTMLTAG_827__HTMLTAG_828
將 LDAP 憑證屬性對應到 Keycloak 使用者屬性以進行 X.509 驗證:
Mapper Type: certificate-ldap-mapper
LDAP Attribute: userCertificate
User Model Attribute: usercertificate
Is DER Formatted: true
Always Read Value From LDAP: true
HTMLTAG_831__HTMLTAG_832___7。密碼雜湊___HTMLTAG_833__HTMLTAG_834
使用 LDAP 聯合時,密碼雜湊有幾個重要特徵:
___HTMLTAG_839__HTMLTAG_840___場景___HTMLTAG_841__HTMLTAG_842___密碼雜湊___HTMLTAG_843__HTMLTAG_844___注意___HTMLTAG_845__HTMLTAG_846___
___HTMLTAG_849__HTMLTAG_850__HTMLTAG_851___READ_ONLY 模式___HTMLTAG_852__HTMLTAG_853__HTMLTAG_854___密碼始終直接透過 LDAP 伺服器進行驗證______MLTAG_855_____MLG____密碼始終直接透過 LDAP 伺服器進行驗證______MLTAG_855__15G_855__不儲存密碼雜湊___HTMLTAG_857__HTMLTAG_858___
___HTMLTAG_859__HTMLTAG_860__HTMLTAG_861___可寫入模式___HTMLTAG_862__HTMLTAG_863__HTMLTAG_864___根據LDAP密碼策略將密碼寫入LDAP___HTMLTAG_865__HTMLTAGML_866___
___HTMLTAG_869__HTMLTAG_870__HTMLTAG_871___UNSYNCED 模式___HTMLTAG_872__HTMLTAG_873__HTMLTAG_874___使用 Keycloak 雜湊保存在 Keycloak DB 中的新密碼____HTMLTAG_875167585875_____ LDAP___HTMLTAG_877__HTMLTAG_878___
# Kiểm tra password policy trên LDAP (OpenLDAP)
ldapsearch -x -H ldap://localhost:389 \
-D "cn=admin,dc=example,dc=com" -W \
-b "cn=config" "(objectClass=olcGlobal)" olcPasswordHash
# Output ví dụ:
# olcPasswordHash: {SSHA}
HTMLTAG_881__HTMLTAG_882___8。 SSSD 與 FreeIPA 整合___HTMLTAG_883__HTMLTAG_884
Keycloak 支援透過 D-Bus 介面與 SSSD(系統安全服務守護程序) 集成,允許從 FreeIPA 或 Red Hat Identity Manager 對使用者進行身份驗證。
HTMLTAG_889__HTMLTAG_890___8.1 先修條件___HTMLTAG_891__HTMLTAG_892
# Cài đặt SSSD trên Keycloak server
sudo dnf install sssd sssd-dbus
# Cấu hình SSSD (/etc/sssd/sssd.conf)
[sssd]
services = nss, pam, ifp
domains = example.com
[domain/example.com]
id_provider = ipa
auth_provider = ipa
access_provider = ipa
ipa_domain = example.com
ipa_server = ipa.example.com
[ifp]
allowed_uids = root, keycloak
user_attributes = +mail, +givenname, +sn, +telephoneNumber
HTMLTAG_893__HTMLTAG_894___8.2 設定 SSSD 聯合提供者___HTMLTAG_895__HTMLTAG_896
在管理控制台中,新增 SSSD 聯合提供者 — Keycloak 將透過 D-Bus 與 SSSD 通訊至:
- 對使用者進行身份驗證 (PAM)
- 取得使用者屬性 (InfoPipe)
- 取得群組成員資格__HTMLTAG_907___
HTMLTAG_909__HTMLTAG_910___9。 Kerberos 橋接器___HTMLTAG_911__HTMLTAG_912
Keycloak 可以使用 Kerberos 驗證 以及 LDAP 聯合,允許使用者使用 Kerberos 票證 (SPNEGO) 自動登入。
HTMLTAG_917__HTMLTAG_918___9.1 使用 LDAP 設定 Kerberos___HTMLTAG_919__HTMLTAG_920
# Trong LDAP provider settings
Allow Kerberos authentication: ON
Kerberos Realm: EXAMPLE.COM
Server Principal: HTTP/[email protected]
KeyTab: /etc/keycloak/keycloak.keytab
Use Kerberos for password authentication: ON
# Tạo keytab cho Keycloak service principal
kadmin.local -q "addprinc -randkey HTTP/[email protected]"
kadmin.local -q "ktadd -k /etc/keycloak/keycloak.keytab HTTP/[email protected]"
# Set permissions
chown keycloak:keycloak /etc/keycloak/keycloak.keytab
chmod 600 /etc/keycloak/keycloak.keytab
HTMLTAG_921__HTMLTAG_922___9.2 SPNEGO 的瀏覽器設定___HTMLTAG_923__HTMLTAG_924
預編碼_20
HTMLTAG_925__HTMLTAG_926___10。自訂使用者儲存 SPI___HTMLTAG_927__HTMLTAG_928
當LDAP不夠用時,您可以編寫自訂使用者儲存提供者來連接任何資料來源(SQL資料庫、REST API、遺留系統...).
HTMLTAG_933__HTMLTAG_934___10.1 SPI 介面___HTMLTAG_935__HTMLTAG_936
// UserStorageProviderFactory — tạo provider instances
public class MyUserStorageProviderFactory
implements UserStorageProviderFactory<MyUserStorageProvider> {
@Override
public String getId() {
return "my-user-storage";
}
@Override
public MyUserStorageProvider create(KeycloakSession session,
ComponentModel model) {
return new MyUserStorageProvider(session, model);
}
}
// UserStorageProvider — implement các interfaces cần thiết
public class MyUserStorageProvider implements
UserStorageProvider,
UserLookupProvider,
CredentialInputValidator,
UserQueryProvider {
@Override
public UserModel getUserByUsername(RealmModel realm, String username) {
// Query external database
ExternalUser extUser = externalDb.findByUsername(username);
if (extUser == null) return null;
// Wrap vào Keycloak UserModel
return new UserAdapter(session, realm, model, extUser);
}
@Override
public boolean isValid(RealmModel realm, UserModel user,
CredentialInput input) {
if (!supportsCredentialType(input.getType())) return false;
// Verify password với external system
return externalDb.verifyPassword(
user.getUsername(),
input.getChallengeResponse()
);
}
}
HTMLTAG_937__HTMLTAG_938___10.2 部署自訂提供者___HTMLTAG_939__HTMLTAG_940
# Build JAR
mvn clean package
# Copy vào Keycloak providers directory
cp target/my-user-storage.jar /opt/keycloak/providers/
# Rebuild Keycloak
/opt/keycloak/bin/kc.sh build
HTMLTAG_941__HTMLTAG_942___11。使用 kcadm.sh 設定 LDAP___HTMLTAG_943__HTMLTAG_944
使用 kcadm.sh 透過命令列設定 LDAP 聯合:
# Đăng nhập
kcadm.sh config credentials \
--server http://localhost:8080 \
--realm master \
--user admin \
--password admin
# Tạo LDAP provider
kcadm.sh create components -r my-realm \
-s name="Corporate LDAP" \
-s providerId=ldap \
-s providerType=org.keycloak.storage.UserStorageProvider \
-s 'config.vendor=["other"]' \
-s 'config.connectionUrl=["ldap://ldap.example.com:389"]' \
-s 'config.bindDn=["cn=admin,dc=example,dc=com"]' \
-s 'config.bindCredential=["admin_password"]' \
-s 'config.usersDn=["ou=People,dc=example,dc=com"]' \
-s 'config.userObjectClasses=["inetOrgPerson, organizationalPerson"]' \
-s 'config.usernameLDAPAttribute=["uid"]' \
-s 'config.rdnLDAPAttribute=["uid"]' \
-s 'config.uuidLDAPAttribute=["entryUUID"]' \
-s 'config.editMode=["READ_ONLY"]' \
-s 'config.syncRegistrations=["false"]' \
-s 'config.searchScope=["2"]' \
-s 'config.importEnabled=["true"]' \
-s 'config.enabled=["true"]' \
-s 'config.priority=["0"]' \
-s 'config.fullSyncPeriod=["604800"]' \
-s 'config.changedSyncPeriod=["86400"]'
# Lấy LDAP provider ID
LDAP_ID=$(kcadm.sh get components -r my-realm \
--fields id,name \
-q providerType=org.keycloak.storage.UserStorageProvider \
| jq -r '.[0].id')
# Thêm group mapper
kcadm.sh create components -r my-realm \
-s name="group-mapper" \
-s providerId=group-ldap-mapper \
-s providerType=org.keycloak.storage.ldap.mappers.LDAPStorageMapper \
-s parentId=$LDAP_ID \
-s 'config.groups.dn=["ou=Groups,dc=example,dc=com"]' \
-s 'config.group.name.ldap.attribute=["cn"]' \
-s 'config.group.object.classes=["groupOfNames"]' \
-s 'config.membership.ldap.attribute=["member"]' \
-s 'config.membership.attribute.type=["DN"]' \
-s 'config.membership.user.ldap.attribute=["uid"]' \
-s 'config.mode=["READ_ONLY"]' \
-s 'config.drop.non.existing.groups.during.sync=["false"]'
# Trigger full sync
kcadm.sh create user-storage/$LDAP_ID/sync -r my-realm \
-s action=triggerFullSync
HTMLTAG_949__HTMLTAG_950___12。 LDAP 問題故障排除___HTMLTAG_951__HTMLTAG_952
HTMLTAG_953__HTMLTAG_954___12.1 連線問題___HTMLTAG_955__HTMLTAG_956
___HTMLTAG_959__HTMLTAG_960___錯誤___HTMLTAG_961__HTMLTAG_962___原因____HTMLTAG_963__HTMLTAG_964___解決方案____HTMLTAG_965__HTMLTAG_966___
___HTMLTAG_969__HTMLTAG_970__HTMLTAG_971___javax.naming.CommunicationException___HTMLTAG_972__HTMLTAG_973__HTMLTAG_974___無法連接到 LDAP 伺服器____HTMLTAG_9757、MLTAG_1 389/636___HTMLTAG_977__HTMLTAG_978___
___HTMLTAG_979__HTMLTAG_980__HTMLTAG_981___javax.naming.AuthenticationException___HTMLTAG_982__HTMLTAG_983__HTMLTAG_984___綁定 DN或綁定憑證錯誤____HTMLTAG_985__HTMLTAG_986____驗證綁定憑證ldap搜尋___HTMLTAG_988__HTMLTAG_989__HTMLTAG_990___
___HTMLTAG_991__HTMLTAG_992__HTMLTAG_993___SSLHandshakeException___HTMLTAG_994__HTMLTAG_995__HTMLTAG_996____憑證不受信任___HTMLTAG_997__HTMLTAG_998796____憑證不受信任___HTMLTAG_997__HTMLTAG_998996____證書不___
___HTMLTAG_1001__HTMLTAG_1002__HTMLTAG_1003___連線逾時___HTMLTAG_1004__HTMLTAG_1005__HTMLTAG_1006___LDAP 伺服器不回應____HTMLTAG_1007__HTMLTA____1008 DNS___HTMLTAG_1009__HTMLTAG_1010___
預編碼_24
HTMLTAG_1013__HTMLTAG_1014___12.2 同步失敗___HTMLTAG_1015__HTMLTAG_1016
___HTMLTAG_1019__HTMLTAG_1020___錯誤___HTMLTAG_1021__HTMLTAG_1022___原因____HTMLTAG_1023__HTMLTAG_1024___解決方案____HTMLTAG_1025__HTMLTAG_1026___
___HTMLTAG_1029__HTMLTAG_1030__HTMLTAG_1031___使用者...已存在___HTMLTAG_1032__HTMLTAG_1033__HTMLTAG_1034____LDAP與本機使用者之間的使用者名稱衝突____HTMLTAG_1035__HTMLTAG_1036___刪除本機使用者或變更使用者名稱對應___HTMLTAG_1037__HTMLTAG_1038___
___HTMLTAG_1039__HTMLTAG_1040__HTMLTAG_1041___超出大小限制___HTMLTAG_1042__HTMLTAG_1043__HTMLTAG_1044___LDLDAP 伺服器限制回傳結果的數量____HTMLTAG_10457144___LDLD__41TAGAP_AP 10457414AP過濾器以減少範圍___HTMLTAG_1047__HTMLTAG_1048___
___HTMLTAG_1049__HTMLTAG_1050__HTMLTAG_1051___推薦___HTMLTAG_1052__HTMLTAG_1053__HTMLTAG_1054___LDAP 傳回推薦而非結果___HTMLTAG_1055__HTMLTAG_105AP 回傳推薦遵循連接中的設定___HTMLTAG_1059__HTMLTAG_1060___
HTMLTAG_1063__HTMLTAG_1064___12.3 映射器問題___HTMLTAG_1065__HTMLTAG_1066
預編碼_25
HTMLTAG_1067__HTMLTAG_1068___13。最佳實務___HTMLTAG_1069__HTMLTAG_1070
___HTMLTAG_1072__HTMLTAG_1073___一律使用 LDAPS 或 StartTLS — 避免以明文形式傳送憑證
___HTMLTAG_1076__HTMLTAG_1077___使用單獨的服務帳戶進行綁定 DN — 不要使用管理員帳戶
HTMLTAG_1080__HTMLTAG_1081___限制搜尋範圍 — 使用自訂使用者 LDAP 過濾器僅匯入必要的使用者__HTMLTAG_1083
___HTMLTAG_1084__HTMLTAG_1085___啟用連線池 — 減少連線建立開銷
___HTMLTAG_1088__HTMLTAG_1089___適當設定同步週期 — 太短會導致 LDAP 負載過重,太長會導致資料過時
___HTMLTAG_1092__HTMLTAG_1093___監控同步日誌 — Keycloak 記錄詳細的同步過程
___HTMLTAG_1096__HTMLTAG_1097___首先使用 READ_ONLY 進行測試 — 首次設定時,在傳輸 WRITABLE 之前使用 READ_ONLY 進行驗證
___HTMLTAG_1100__HTMLTAG_1101___在大同步之前備份 Keycloak 資料庫 — 完全同步可以匯入數千個使用者