Chuyển đến nội dung chính

第 11 課:多重驗證 - OTP、WebAuthn 和金鑰

使用 TOTP/HOTP(Google 驗證器、FreeOTP)、OTP 策略設定、復原代碼設定雙重認證。 WebAuthn 設定(FIDO2 安全金鑰)、WebAuthn 無密碼原則。金鑰整合(條件和模式 UI)、透過 AIA 註冊金鑰、Kerberos 驗證和 X.509 用戶端憑證驗證。

🔒 DevSecOps — 第 11 課 第 11 課:多重驗證 - OTP, WebAuthn 和密鑰

從基礎到進階的鑰匙斗篷__HTMLTAG_59___

第 3 部分:驗證、MFA 和身分代理

xdev.asia

HTMLTAG_67__HTMLTAG_68___1。 OTP 驗證 — TOTP 和 HOTP___HTMLTAG_69__HTMLTAG_70

OTP(一次性密碼)是最受歡迎的 MFA 方法。 Keycloak支援兩種類型:

___HTMLTAG_75__HTMLTAG_76___類型____HTMLTAG_77__HTMLTAG_78___描述____HTMLTAG_79__HTMLTAG_80___演算法____HTMLTAG_81__HTMLTAG_82___ ___HTMLTAG_85__HTMLTAG_86__HTMLTAG_87___TOTP(基於時間)___HTMLTAG_89__HTMLTAG_90___OTP 程式碼隨時間變化(每 30 秒)___HTMLTAG_91__HTMLTAG_92___MLC14U4UU​​T_UUU​​T_UUU​​US_UU​​Ds_UU​​UsU​​Ds_UU​​UsU​​UTU​​DDGML* ___HTMLTAG_95__HTMLTAG_96__HTMLTAG_97___HOTP(基於 HMAC)___HTMLTAG_99__HTMLTAG_100___OTP 代碼根據計數器進行更改___HTMLTAG_101__HTMLTAG_102___RFC MLTAG_102___

___HTMLTAG_107__HTMLTAG_108___建議使用 TOTP,因為它更安全 — 程式碼會隨著時間的推移而過期。僅當設備不支援精確時鐘時才使用 HOTP。

HTMLTAG_111__HTMLTAG_112___1.1 OTP 政策設定___HTMLTAG_113__HTMLTAG_114

在 驗證 → 政策 → OTP 策略:

設定 OTP 策略 ___HTMLTAG_121__HTMLTAG_122___設定____HTMLTAG_123__HTMLTAG_124___說明____HTMLTAG_125__HTMLTAG_126___預設值___HTMLTAG_127__HTMLTAG_128____126___預設值___HTMLTAG_127__HTMLTAG_128_______ML____ ___HTMLTAG_133__HTMLTAG_134__HTMLTAG_135___OTP 類型___HTMLTAG_136__HTMLTAG_137__HTMLTAG_138___TOTP或HOTP___HTMLTAG_139__HTMLTAG_140__HTMLTAG_141___totp___HTMLTAG_142__HTMLTAG_143__HTMLTAG_144__HTMLTAG_145____totp___HTMLTAG_146__HTMLTAG_147828___ ___HTMLTAG_149__HTMLTAG_150__HTMLTAG_151___OTP雜湊演算法___HTMLTAG_152__HTMLTAG_153__HTMLTAG_154___演算法雜湊____HTMLTAG_155__HTMLTAG_156__HTMLTAG_157___SHA1____HTMLTAG_158__HTMLTAG_159__HTMLTAG_1____HTMLTAG_158__HTMLTAG_159__HTMLTAG_16_HTML15G_____________ SHA512___HTMLTAG_164__HTMLTAG_165__HTMLTAG_166___ ___HTMLTAG_167__HTMLTAG_168__HTMLTAG_169___位數___HTMLTAG_170__HTMLTAG_171__HTMLTAG_172___位數OTP___HTMLTAG_173__HTMLTAG_174__HT MLTAG_175___6___HTMLTAG_176__HTMLTAG_177__HTMLTAG_178__HTMLTAG_179____6(最佳相容)___HTMLTAG_181__HTMLTAG_182___ ___HTMLTAG_183__HTMLTAG_184__HTMLTAG_185___前視視窗___HTMLTAG_186__HTMLTAG_187__HTMLTAG_188___接受的上一個/下一個代碼編號get___HT MLTAG_189__HTMLTAG_190__HTMLTAG_191___1___HTMLTAG_192__HTMLTAG_193__HTMLTAG_194__HTMLTAG_195___1 — 若使用者經常出現時間錯誤,則增加___HTMLTAG_197__HTMLTAG_198___ ___HTMLTAG_199__HTMLTAG_200__HTMLTAG_201___OTP 令牌週期___HTMLTAG_202__HTMLTAG_203__HTMLTAG_204___每個程式碼的生存時間(秒)—僅TOTP___HTMLTAG_205__HTMLTAG_206__HTMLTAG_207___30____HTMLTAG_208__HTMLTAG_209__HTMLTAG_210__HTMLTAG_211____30___HTMLTAG_212__MLTAG_212__142G13212_____ ___HTMLTAG_215__HTMLTAG_216__HTMLTAG_217___初始計數器___HTMLTAG_218__HTMLTAG_219__HTMLTAG_220___初始計數器 —僅HOTP___HTMLTAG_221__HTMLTAG_222__HTMLTAG_223____0___HTMLTAG_224__HTMLTAG_225__HTMLTAG_226__HTMLTAG_227____0___HTMLTAG_228__HTMLTAG_299__ ___HTMLTAG_231__HTMLTAG_232__HTMLTAG_233___支援的應用程式____HTMLTAG_234__HTMLTAG_235__HTMLTAG_236___設定說明中顯示的應用程式___HTMLTAG_237__HTMLTAG_238___FreeP、Google身份驗證器___HTMLTAG_239__HTMLTAG_240___新增更多應用程序,如果需要___HTMLTAG_241__HTMLTAG_242___

HTMLTAG_245__HTMLTAG_246___1.2 使用 Google 驗證器/FreeOTP 設定 OTP___HTMLTAG_247__HTMLTAG_248

HTMLTAG_249__HTMLTAG_250___步驟 1:在驗證流程中開啟 OTP___HTMLTAG_251__HTMLTAG_252

預設情況下,瀏覽器流已具有 瀏覽器 - 條件 OTP 子流。僅當使用者設定了 OTP 憑證時才需要 OTP。為了 要求 ,所有使用者都必須設定 OTP:

  1. 轉到 驗證 → 所需操作___HTMLTAG_262__HTMLTAG_263___
  2. 查找 設定 OTP___HTMLTAG_266__HTMLTAG_267___
  3. 開啟 預設操作:開啟 — 所有新使用者都必須設定 OTP
  4. 或在「設定為預設動作」欄位中啟用 必需的,以強制現有使用者實施

HTMLTAG_277__HTMLTAG_278___步驟 2:使用者註冊 OTP___HTMLTAG_279__HTMLTAG_280

當使用者首次登入時(或管理員開啟「必要操作」後):

  1. Keycloak 顯示頁面 「行動驗證器設定」___HTMLTAG_286__HTMLTAG_287___
  2. 使用者開啟 Google 驗證器或 FreeOTP 應用程式
  3. 掃描二維碼或輸入手動密鑰
  4. 輸入應用程式中的確認 OTP 代碼
  5. 為使用者保存的 OTP 憑證

HTMLTAG_297__HTMLTAG_298___步驟 3:OTP 驗證___HTMLTAG_299__HTMLTAG_300

從下次登入開始,輸入使用者名稱/密碼後,使用者必須輸入應用程式中的 OTP 代碼。

HTMLTAG_303__HTMLTAG_304___1.3 管理 OTP 憑證___HTMLTAG_305__HTMLTAG_306

預編碼_0

HTMLTAG_307__HTMLTAG_308___2。恢復代碼___HTMLTAG_309__HTMLTAG_310

恢復代碼允許使用者在遺失 OTP 設備時恢復存取權限。

HTMLTAG_313__HTMLTAG_314___2.1 啟用復原碼___HTMLTAG_315__HTMLTAG_316

  1. 轉至 驗證 → 所需操作___HTMLTAG_320__HTMLTAG_321___
  2. 找出恢復驗證碼(如果沒有,需要註冊)
  3. 已啟用 預設操作 或 已啟用___HTMLTAG_330__HTMLTAG_331___

___HTMLTAG_333__HTMLTAG_334___在 OTP 設定後強制執行恢復代碼:HTMLTAG_335__HTMLTAG_336

要強制使用者在設定 OTP 後立即建立恢復程式碼,請依照下列順序設定所需操作:

    ___HTMLTAG_340__HTMLTAG_341___CONFIGURE_TOTP — 首先設定 OTP ___HTMLTAG_344__HTMLTAG_345___CONFIGURE_RECOVERY_AUTHN_CODES — 產生以下復原程式碼

HTMLTAG_349__HTMLTAG_350___2.2 使用復原碼___HTMLTAG_351__HTMLTAG_352

當使用者遺失設備 OTP 時:

  1. 在 OTP 輸入畫面上,點選 「嘗試其他方式」___HTMLTAG_358__HTMLTAG_359___
  2. 選擇 「復原碼」___HTMLTAG_362__HTMLTAG_363___
  3. 輸入已儲存的復原碼之一
  4. 每個程式碼只能使用一次___HTMLTAG_368__HTMLTAG_369___
  5. 使用完所有程式碼後,需重新產生

HTMLTAG_373__HTMLTAG_374___3。 WebAuthn (FIDO2) — 安全金鑰___HTMLTAG_375__HTMLTAG_376

WebAuthn 允许使用 硬件安全密钥(YubiKey、Google Titan)或 平台身份验证器(Touch ID、Windows Hello)进行身份验证.

HTMLTAG_383__HTMLTAG_384___3.1 在瀏覽器流程中設定 WebAuthn___HTMLTAG_385__HTMLTAG_386

HTMLTAG_387__HTMLTAG_388___步驟 1:將 WebAuthn 新增至驗證流程___HTMLTAG_389__HTMLTAG_390

  1. 重複瀏覽器流程 → 具有 WebAuthn 的瀏覽器___HTMLTAG_394__HTMLTAG_395___
  2. 在表單子流程中,新增 WebAuthn 驗證器___HTMLTAG_398__HTMLTAG_399___
  3. 流程架構: ___預編碼_1___
  4. 綁定流程: 驗證 → 綁定 → 瀏覽器流程 = 使用 WebAuthn 的瀏覽器___HTMLTAG_404__HTMLTAG_405___

HTMLTAG_407__HTMLTAG_408___第 2 步:啟用所需操作___HTMLTAG_409__HTMLTAG_410

  1. 轉至 驗證 → 所需操作___HTMLTAG_414__HTMLTAG_415___
  2. 查找 WebAuthn 註冊 → 啟用 預設操作___HTMLTAG_420__HTMLTAG_421___
  3. 新用戶將被要求註冊安全金鑰

HTMLTAG_425__HTMLTAG_426___3.2 WebAuthn 政策設定___HTMLTAG_427__HTMLTAG_428

在 驗證 → 策略 → WebAuthn 策略:

進行配置 ___HTMLTAG_435__HTMLTAG_436___設定___HTMLTAG_437__HTMLTAG_438___說明___HTMLTAG_439__HTMLTAG_440___值___HTMLTAG_441__HTMLTAG_442___ ___HTMLTAG_445__HTMLTAG_446__HTMLTAG_447___依賴實體名稱___HTMLTAG_448__HTMLTAG_449__HTMLTAG_450___使用者的顯示名稱___HTMLTAG_451__HTMLTAG_452__450___使用者的顯示名稱___HTMLTAG_451__HTMLTAG_452__HTMLTAG_451或公司名稱___HTMLTAG_455__HTMLTAG_456___ ___HTMLTAG_457__HTMLTAG_458__HTMLTAG_459___簽章演算法____HTMLTAG_460__HTMLTAG_461__HTMLTAG_462___字母演算法簽章___HTMLTAG_463__HTMLTAG_464_HTMLTAG_4651VMLTAG_463__HT RS256___HTMLTAG_468__HTMLTAG_469__HTMLTAG_470___ ___HTMLTAG_471__HTMLTAG_472__HTMLTAG_473___依賴方 ID___HTMLTAG_474__HTMLTAG_475__HTMLTAG_476___Keycloak 域____HTMLTAG_477__HTMLTAG_478__HTMLTAG_4778__147478__(47478__483____] =自動)___HTMLTAG_481__HTMLTAG_482___ ___HTMLTAG_483__HTMLTAG_484__HTMLTAG_485___證明傳送首選項____HTMLTAG_486__HTMLTAG_487__HTMLTAG_488___來自金鑰的證明請求____HTMLTAG_489__HTMLTAG_ML49091MLG_ML49012G___或直接___HTMLTAG_494__HTMLTAG_495__HTMLTAG_496___ ___HTMLTAG_497__HTMLTAG_498__HTMLTAG_499___驗證器附件___HTMLTAG_500__HTMLTAG_501__HTMLTAG_502___驗證器類型___HTMLTAG_503__HTMLTAG_504__HTMLTAG_505________HT金鑰與平台)___HTMLTAG_507__HTMLTAG_508___ ___HTMLTAG_509__HTMLTAG_510__HTMLTAG_511___需要常駐密鑰___HTMLTAG_512__HTMLTAG_513__HTMLTAG_514___密鑰必須儲存於設備上___HTMLTAG_515__HTMLTAG_516__HTMLTAG_517___未指定___HTMLTAG_518__HTMLTAG_519__HTMLTAG_520___ ___HTMLTAG_521__HTMLTAG_522__HTMLTAG_523___使用者驗證要求___HTMLTAG_524__HTMLTAG_525__HTMLTAG_526___設備上需要使用者驗證要求___HTMLTAG_527__HTMLTAG_528__14G_528__53____或必填____HTMLTAG_532__HTMLTAG_533__HTMLTAG_534___ ___HTMLTAG_535__HTMLTAG_536__HTMLTAG_537___建立逾時___HTMLTAG_538__HTMLTAG_539__HTMLTAG_540___註冊金鑰時的逾時(秒)___HTMLTAG_541__HTMLTAG_542__HTMLTAG_543____0(無逾時)___HTMLTAG_545__HTMLTAG_546___ ___HTMLTAG_547__HTMLTAG_548__HTMLTAG_549___避免使用相同的驗證器註冊___HTMLTAG_550__HTMLTAG_551__HTMLTAG_552___避免使用相同金鑰註冊2次___HTMLTAG_553__HTMLTAG_554__HTMLTAG_555___關閉___HTMLTAG_556__HTMLTAG_557__HTMLTAG_558___ ___HTMLTAG_559__HTMLTAG_560__HTMLTAG_561___可接受的 AAGUID___HTMLTAG_562__HTMLTAG_563__HTMLTAG_564___白名單安全密鑰模型___HTMLTAG_565__HTMLTAG_566___MLTAG_566___ML_76767677____ML_566___

HTMLTAG_571__HTMLTAG_572___3.3 管理 WebAuthn 憑證___HTMLTAG_573__HTMLTAG_574

預編碼_2

使用者也可以在 帳號控制台(位於 /realms/myrealm/account/#/security/webauthn.

___HTMLTAG_581__HTMLTAG_582___4。密鑰___HTMLTAG_583__HTMLTAG_584___

Passkeys 是 WebAuthn 的下一代發展 — 允許使用指紋、臉部辨識或裝置 PIN 進行 無密碼登入__HTMLTAG_587___(無密碼)。

HTMLTAG_589__HTMLTAG_590___4.1 金鑰與傳統 Web 驗證___HTMLTAG_591__HTMLTAG_592

___HTMLTAG_595__HTMLTAG_596___功能____HTMLTAG_597__HTMLTAG_598___WebAuthn (MFA)___HTMLTAG_599__HTMLTAG_600___密鑰(無密碼)____HTMLTAG_601__HTMLTAG_601__HT2___ ___HTMLTAG_605__HTMLTAG_606__HTMLTAG_607___目的____HTMLTAG_608__HTMLTAG_609__HTMLTAG_610___MFA — 在密碼後加入步驟____HTMLTAG_611__HTMLTAG_612___1TAG_612___141141414132_____ ___HTMLTAG_615__HTMLTAG_616__HTMLTAG_617___驗證器____HTMLTAG_618__HTMLTAG_619__HTMLTAG_620__HTMLTAG_621___WebAuthn驗證器____HTMLTAG_622__HTMLTAG_623__HTMLTAG_624__HTMLTAG_625___WebAuthn 無密碼驗證器____HTMLTAG_626__HTMLTAG_627__HTMLTAG_628___ ___HTMLTAG_629__HTMLTAG_630__HTMLTAG_631___政策___HTMLTAG_632__HTMLTAG_633__HTMLTAG_634___WebAuthn 政策___HTMLTAG_635__HTMLTAG_636___WebWebAuthn 政策___HTMLTAG_635__HT__TAG_636___WebWebAuthn_______ML ___HTMLTAG_639__HTMLTAG_640__HTMLTAG_641____所需操作___HTMLTAG_642__HTMLTAG_643__HTMLTAG_644____WebAuthn 註冊____HTMLTAG_645__HTMLTAG_644____WebAuthn 註冊____HTMLTAG_645__HTMLTAG_644____WebAuthn 註冊____41TAG_645__HTMLTAG_646___WebAuthnML ___HTMLTAG_649__HTMLTAG_650__HTMLTAG_651___常駐密鑰____HTMLTAG_652__HTMLTAG_653__HTMLTAG_654____可選___HTMLTAG_655__HTMLTAG_656______MLTA___ML____MLTAMLTAG157172________ML_7_7)____ML ___HTMLTAG_659__HTMLTAG_660__HTMLTAG_661___使用者驗證___HTMLTAG_662__HTMLTAG_663__HTMLTAG_664___首選項____HTMLTAG_665__HTMLTAG_666____ML(生物辨識/PIN)HTMLTAG_665__HTMLTAG_666____ML(生物辨識/PIN)

HTMLTAG_671__HTMLTAG_672___4.2 啟用密鑰___HTMLTAG_673__HTMLTAG_674

HTMLTAG_675__HTMLTAG_676___步驟 1:設定 WebAuthn 無密碼原則___HTMLTAG_677__HTMLTAG_678

  1. 前往 驗證 → 政策 → WebAuthn 無密碼原則___HTMLTAG_682__HTMLTAG_683___
  2. 配置:
      ___HTMLTAG_686__HTMLTAG_687___信賴方實體名稱:我的公司___HTMLTAG_690__HTMLTAG_691___ ___HTMLTAG_692__HTMLTAG_693___簽章演算法:ES256___HTMLTAG_696__HTMLTAG_697___ ___HTMLTAG_698__HTMLTAG_699___使用者驗證要求:必需___HTMLTAG_702__HTMLTAG_703___ ___HTMLTAG_704__HTMLTAG_705___需要常駐密鑰:是 — 需要密鑰

HTMLTAG_713__HTMLTAG_714___步驟 2:建立無密碼瀏覽器流程___HTMLTAG_715__HTMLTAG_716

預編碼_3

HTMLTAG_717__HTMLTAG_718___步驟 3:啟用所需操作___HTMLTAG_719__HTMLTAG_720

  1. 轉至 驗證 → 所需操作___HTMLTAG_724__HTMLTAG_725___
  2. 開啟 WebAuthn 無密碼註冊 → 預設操作:開啟

HTMLTAG_731__HTMLTAG_732___4.3 萬能鑰匙 UI 模式 — 條件與模態___HTMLTAG_733__HTMLTAG_734

___HTMLTAG_735__HTMLTAG_736___條件 UI(自動填入):HTMLTAG_737__HTMLTAG_738

密碼會自動在使用者名字段中建議 - 使用者只需選擇並使用生物辨識技術進行身份驗證。這是最流暢的體驗。

要啟用條件 UI,請將 WebAuthn 無密碼身份驗證器 放在流程中的第一個位置,並要求 Alternative___.___

___HTMLTAG_747__HTMLTAG_748___模態使用者介面:HTMLTAG_749__HTMLTAG_750

瀏覽器顯示一個對話框,要求進行金鑰驗證。使用者必須與對話框互動。當您需要明確的使用者體驗時使用。

___HTMLTAG_753__HTMLTAG_754___4.4 透過 AIA 註冊金鑰(應用程式啟動操作)HTMLTAG_755__HTMLTAG_756

使用者可以隨時透過 AIA 連結註冊 Passkey:

預編碼_4

___HTMLTAG_759__HTMLTAG_760___如果存在則跳過: 如果您想在使用者已擁有金鑰時跳過註冊:

預編碼_5

___HTMLTAG_763__HTMLTAG_764___JavaScript 整合:HTMLTAG_765__HTMLTAG_766

預編碼_6

HTMLTAG_767__HTMLTAG_768___5。 Kerberos 驗證___HTMLTAG_769__HTMLTAG_770

Kerberos 允許登入網域(Windows AD、MIT Kerberos)的使用者自動單一登入__HTMLTAG_773___。使用者無需輸入憑證 - 瀏覽器自動發送 Kerberos 票證。

HTMLTAG_775__HTMLTAG_776___5.1 Kerberos 伺服器設定___HTMLTAG_777__HTMLTAG_778

請求:

  • KDC(金鑰分發中心)正在執行 — Active Directory 或 MIT Kerberos
  • Keycloak 服務的 SPN(服務主體編號)
  • Keycloak 的 Keytab 檔案

預編碼_7

HTMLTAG_789__HTMLTAG_790___5.2 為 Kerberos 設定 Keycloak___HTMLTAG_791__HTMLTAG_792

HTMLTAG_793__HTMLTAG_794___選項 1:Kerberos 使用者儲存提供者___HTMLTAG_795__HTMLTAG_796

  1. 到 使用者聯合 → 新增供應商 → Kerberos___HTMLTAG_800__HTMLTAG_801___
  2. 配置:
      ___HTMLTAG_804__HTMLTAG_805___Kerberos 領域:EXAMPLE.COM___HTMLTAG_808__HTMLTAG_809___ ___HTMLTAG_810__HTMLTAG_811___伺服器主體:HTTP/[email protected]___HTMLTAG_814__HTMLTAG_815___ ___HTMLTAG_816__HTMLTAG_817___按鍵選項卡:/etc/keycloak/keycloak.keytab___HTMLTAG_820__HTMLTAG_821___ ___HTMLTAG_822__HTMLTAG_823___允許 Kerberos 驗證:開啟 ___HTMLTAG_826__HTMLTAG_827___使用 Kerberos 進行密碼驗證:開 ___HTMLTAG_830__HTMLTAG_831___更新首次登入:開啟

___HTMLTAG_837__HTMLTAG_838___選項 2:LDAP + Kerberos (Active Directory)HTMLTAG_839__HTMLTAG_840

  1. 前往 使用者聯合 → 新增供應商 → LDAP___HTMLTAG_844__HTMLTAG_845___
  2. 為 AD 設定 LDAP 連線
  3. 啟用 允許 Kerberos 驗證___HTMLTAG_850__HTMLTAG_851___
  4. 輸入 Kerberos 領域、伺服器主體、金鑰選項卡

HTMLTAG_855__HTMLTAG_856___5.3 在瀏覽器流中啟用 Kerberos____HTMLTAG_857__HTMLTAG_858

  1. 轉到 驗證→流→瀏覽器(或自訂流)
  2. 搜尋 Kerberos 執行
  3. 將要求從 已停用 更改為 替代___HTMLTAG_872__HTMLTAG_873___

預編碼_8

HTMLTAG_875__HTMLTAG_876___5.4 跨領域信任___HTMLTAG_877__HTMLTAG_878

允許一個 Kerberos 領域的使用者信任另一個領域:

預編碼_9

HTMLTAG_881__HTMLTAG_882___6。 X.509 用戶端憑證驗證____HTMLTAG_883__HTMLTAG_884

X.509 允許使用 用戶端憑證 進行驗證 — 常見於企業、政府或 mTLS 環境中。

HTMLTAG_889__HTMLTAG_890___6.1 將 X.509 新增至瀏覽器流程___HTMLTAG_891__HTMLTAG_892

  1. 重複瀏覽器流程 → 使用 X.509 的瀏覽器___HTMLTAG_896__HTMLTAG_897___
  2. 新增 X509/驗證使用者名稱表單至流程

預編碼_10

HTMLTAG_903__HTMLTAG_904___6.2 設定 X.509 驗證器___HTMLTAG_905__HTMLTAG_906

點選 X509/驗證使用者名稱表單:

旁邊的 ⚙️ ___HTMLTAG_913__HTMLTAG_914___設定____HTMLTAG_915__HTMLTAG_916___說明____HTMLTAG_917__HTMLTAG_918___範例____HTMLTAG_919__HTMLTAG_920___ ___HTMLTAG_923__HTMLTAG_924__HTMLTAG_925___使用者身分來源___HTMLTAG_926__HTMLTAG_927__HTMLTAG_928___憑證中用於識別使用者的欄位____HTMLTAG_929__ HTMLTAG_930__HTMLTAG_931____主題的通用名稱、主題的電子郵件___HTMLTAG_934__HTMLTAG_935__HTMLTAG_936___ ___HTMLTAG_937__HTMLTAG_938__HTMLTAG_939___將來源對應到使用者屬性___HTMLTAG_940__HTMLTAG_941__HTMLTAG_942___將身分來源映射到使用者屬性____HTMLTAG_943__HTMLTAG_944__HTMLTAG_945___使用者名稱或電子郵件___HTMLTAG_946__HTMLTAG_947__HTMLTAG_948___ ___HTMLTAG_949__HTMLTAG_950__HTMLTAG_951___正規表示式___HTMLTAG_952__HTMLTAG_953__HTMLTAG_954___正規表示式從憑證中擷取身分字段___HTMLTAG_955__HTMLTAG_956__HTMLTAG_957___CN=(.*?)(?:,\|$)___HTMLTAG_958__HTMLTAG_959__HTMLTAG_960___ ___HTMLTAG_961__HTMLTAG_962__HTMLTAG_963___CRL檢查已啟用___HTMLTAG_964__HTMLTAG_965__HTMLTAG_966___檢查憑證撤銷清單___HTMLTAG_967__HTMLTAG_968__HTMLTAG_969___開啟___HTMLTAG_970__HTMLTAG_971__HT ___HTMLTAG_973__HTMLTAG_974__HTMLTAG_975___CRL 分發點___HTMLTAG_976__HTMLTAG_977__HTMLTAG_978___URL或路徑CRL
ldap://ca.example.com/CN=...___HTMLTAG_983__HTMLTAG_984___ ___HTMLTAG_985__HTMLTAG_986__HTMLTAG_987___OCSP檢查已啟用___HTMLTAG_988__HTMLTAG_989__HTMLTAG_990___檢查線上憑證狀態協定___HTMLTAG_991__HTMLTAG_992__HTMLTAG_993___開啟___HTMLTAG_994__HTMLTAG_995__HTTAG_995__ ___HTMLTAG_997__HTMLTAG_998__HTMLTAG_999___OCSP 回應程式 URI___HTMLTAG_1000__HTMLTAG_1001__HTMLTAG_1002___OCSP 回應程序URL___HTMLTAG_1003__HTMLTAG_1004__HTMLTAG_1005__URL_1___>___HTMLTAG_1006__HTMLTAG_1007___ ___HTMLTAG_1008__HTMLTAG_1009__HTMLTAG_1010___憑證金鑰使用___HTMLTAG_1011__HTMLTAG_1012__HTMLTAG_1013___所需金鑰使用強制____HTMLTAG_1014__HTMLTAG_1015__HTMLTAG_1016___數位簽章____HTMLTAG_1017__HTMLTAG_1018__HTMLTAG_1019___ ___HTMLTAG_1020__HTMLTAG_1021__HTMLTAG_1022___憑證擴充密鑰用法___HTMLTAG_1023__HTMLTAG_1024__HTMLTAG_1025___擴充擴充金鑰用法___HTMLTAG_1026__HTMLTAG_1027__HTMLTAG_1028___客戶端驗證___HTMLTAG_1029__HTMLTAG_1030__HTMLTAG_1031___ ___HTMLTAG_1032__HTMLTAG_1033__HTMLTAG_1034___憑證策略驗證模式___HTMLTAG_1035__HTMLTAG_1036__HTMLTAG_1037___驗證憑證策略____HTMLTAG_1038__HTMLTAG_1039__HTMLTAG_1040___否指定___HTMLTAG_1041__HTMLTAG_1042__HTMLTAG_1043___

HTMLTAG_1046__HTMLTAG_1047___6.3 憑證對應策略___HTMLTAG_1048__HTMLTAG_1049

有多種方法可以將憑證對應到Keycloak使用者:

# 1. Subject's Common Name → Username
# Certificate: CN=john.doe, OU=Engineering, O=Example Corp
# → username: john.doe

# 2. Subject's e-mail → Email
# Certificate: [email protected]
# → email: [email protected]

# 3. Serial Number → User Attribute
# Certificate: Serial=1A2B3C4D
# → user attribute "x509_serial" = "1A2B3C4D"

# 4. SHA-256 Certificate Thumbprint → User Attribute
# Certificate SHA-256: ab:cd:ef:12:34:...
# → user attribute "x509_thumbprint" = "ab:cd:ef:12:34:..."

# 5. Subject's DN với regex
# Certificate: CN=john.doe, OU=Engineering, O=Example Corp, C=VN
# Regex: CN=(.*?)(?:,|$)
# → Extracted: john.doe

HTMLTAG_1052__HTMLTAG_1053___6.4 CRL 和 OCSP 檢查___HTMLTAG_1054__HTMLTAG_1055

確保憑證未被撤銷:

___HTMLTAG_1058__HTMLTAG_1059___CRL(憑證撤銷清單):___HTMLTAG_1060__HTMLTAG_1061___
  • Keycloak 從配置的 URI 下載並快取 CRL
  • 檢查客戶端憑證的序號是否在CRL中__HTMLTAG_1066___
  • 如果 CRL 不可用且 CRL 檢查已啟用=開 → 驗證失敗

___HTMLTAG_1072__HTMLTAG_1073___OCSP(線上憑證狀態協定):HTMLTAG_1074__HTMLTAG_1075

  • 即時查看憑證狀態
  • Keycloak 向 OCSP 回應程序發送請求__HTMLTAG_1080___
  • 比單獨檢查的 CRL 更快
  • 缺點:取決於 OCSP 伺服器可用性
# Test OCSP check
openssl ocsp \
  -issuer ca.pem \
  -cert client.pem \
  -url http://ocsp.example.com \
  -resp_text

# Test certificate info
openssl x509 -in client.pem -noout -subject -serial -fingerprint -sha256

HTMLTAG_1086__HTMLTAG_1087___6.5 Keycloak mTLS 設定___HTMLTAG_1088__HTMLTAG_1089

為了讓Keycloak接收客戶端證書,需要直接配置反向代理或Keycloak:

# Docker Compose — Keycloak với mTLS qua nginx
services:
  nginx:
    image: nginx:latest
    ports:
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf
      - ./certs/server.crt:/etc/nginx/certs/server.crt
      - ./certs/server.key:/etc/nginx/certs/server.key
      - ./certs/ca.crt:/etc/nginx/certs/ca.crt
    depends_on:
      - keycloak

  keycloak:
    image: quay.io/keycloak/keycloak:26.0
    command: start --proxy-headers xforwarded
    environment:
      KC_HOSTNAME: keycloak.example.com
      KC_HTTP_ENABLED: "true"
      KC_PROXY_HEADERS: xforwarded
      KEYCLOAK_ADMIN: admin
      KEYCLOAK_ADMIN_PASSWORD: admin
# nginx.conf — Forward client certificate
server {
    listen 443 ssl;
    server_name keycloak.example.com;

    ssl_certificate /etc/nginx/certs/server.crt;
    ssl_certificate_key /etc/nginx/certs/server.key;
    ssl_client_certificate /etc/nginx/certs/ca.crt;
    ssl_verify_client optional;

    location / {
        proxy_pass http://keycloak:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Port 443;
        
        # Forward client certificate
        proxy_set_header ssl-client-cert $ssl_client_escaped_cert;
    }
}

HTMLTAG_1092__HTMLTAG_1093___7。比較 MFA 方法___HTMLTAG_1094__HTMLTAG_1095

___HTMLTAG_1098__HTMLTAG_1099___方法___HTMLTAG_1100__HTMLTAG_1101___安全保密___HTMLTAG_1102__HTMLTAG_1103___UX ___HTMLTAG_1104__HTMLTAG_1105___防網釣___HTMLTAG_1106__HTMLTAG_1107___使用案例___HTMLTAG_1108__HTMLTAG_1109___ ___HTMLTAG_1112__HTMLTAG_1113__HTMLTAG_1114___TOTP/HOTP___HTMLTAG_1115__HTMLTAG_1116__HTMLTAG_1117___中央平均___HTMLTAG_1118_ _HTMLTAG_1119___好___HTMLTAG_1120__HTMLTAG_1121___否___HTMLTAG_1122__HTMLTAG_1123___流行,易於部署___HTMLTAG_1124__HTMLTAG_1125___ ___HTMLTAG_1126__HTMLTAG_1127__HTMLTAG_1128___WebAuthn (MFA)___HTMLTAG_1129__HTMLTAG_1130__HTMLTAG_1131___高___HTMLTAG_1132__HTMLTAG_1133____好___HTMLT AG_1134__HTMLTAG_1135___是___HTMLTAG_1136__HTMLTAG_1137___企業、合規性___HTMLTAG_1138__HTMLTAG_1139___ ___HTMLTAG_1140__HTMLTAG_1141__HTMLTAG_1142___密鑰____HTMLTAG_1143__HTMLTAG_1144__HTMLTAG_1145___非常高___HTMLTAG_1146__HTM LTAG_1147___導出身分___HTMLTAG_1148__HTMLTAG_1149___是___HTMLTAG_1150__HTMLTAG_1151___消費者+企業___HTMLTAG_1152__HTMLTAG_1153___ ___HTMLTAG_1154__HTMLTAG_1155__HTMLTAG_1156___Kerberos___HTMLTAG_1157__HTMLTAG_1158__HTMLTAG_1159___高___HTML TAG_1160__HTMLTAG_1161___優秀(透明)___HTMLTAG_1162__HTMLTAG_1163___是(域)___HTMLTAG_1164__HTMLTAG_1165___企業、Windows域___HTMLTAG_1166__HTMLTAG_1167___ ___HTMLTAG_1168__HTMLTAG_1169__HTMLTAG_1170___X.509憑證___HTMLTAG_1171__HTMLTAG_1172__HTMLTAG_1173___非常高___HTMLTAG_1174__HTMLTAG_1175___透明___HTMLTAG _1176__HTMLTAG_1177___是___HTMLTAG_1178__HTMLTAG_1179___政府、軍事、銀行___HTMLTAG_1180__HTMLTAG_1181___

HTMLTAG_1184__HTMLTAG_1185___8。摘要___HTMLTAG_1186__HTMLTAG_1187

___HTMLTAG_1190__HTMLTAG_1191___概念____HTMLTAG_1192__HTMLTAG_1193___說明____HTMLTAG_1194__HTMLTAG_1195___ ___HTMLTAG_1198__HTMLTAG_1199__HTMLTAG_1200___OTP 策略___HTMLTAG_1201__HTMLTAG_1202__HTMLTAG_1203____TOTP/HOTP 設定 — 演算法、數位、週期、前瞻____1203____TOTP/HOTP 設定 — 演算法、數字、週期、前瞻____10GML ___HTMLTAG_1206__HTMLTAG_1207__HTMLTAG_1208___恢復代碼___HTMLTAG_1209__HTMLTAG_1210__HTMLTAG_1211___設備遺失時的備份代碼 OTP____HTMLTAG_1212__HT ___HTMLTAG_1214__HTMLTAG_1215__HTMLTAG_1216___WebAuthn___HTMLTAG_1217__HTMLTAG_1218__HTMLTAG_1219____FIDO2 安全密鑰 — 防網路釣魚 MFA_
_FIDO2 安全密鑰 —ML201 MFA____HTMLTAG_120120120120120120120201202012012012020120202020 ___HTMLTAG_1222__HTMLTAG_1223__HTMLTAG_1224___密鑰____HTMLTAG_1225__HTMLTAG_1226__HTMLTAG_1227___無密碼身份驗證 - 可發現的憑證 + 生物辨識____HTMLTAG_1288___無密碼驗證 ___HTMLTAG_1230__HTMLTAG_1231__HTMLTAG_1232___Kerberos___HTMLTAG_1233__HTMLTAG_1234__HTMLTAG_1235___網域使用者透明 SSO____HTMLTAG_1236__HTMLTAG_1237___ ___HTMLTAG_1238__HTMLTAG_1239__HTMLTAG_1240___X.509___HTMLTAG_1241__HTMLTAG_1242__HTMLTAG_1243___客戶端憑證驗證 — mTLS___HTMLTAG_12444HTTAGMLTAG_MLTAGMLTAG ___HTMLTAG_1246__HTMLTAG_1247__HTMLTAG_1248___CRL/OCSP___HTMLTAG_1249__HTMLTAG_1250__HTMLTAG_1251___憑證撤銷檢查___HTMLTAG_1252__HTMLTAG_1253___