無法停用 Kerberos 單一登入 (SSO)

無法停用 Kerberos 單一登入 (SSO)

我一直在探索 Kerberos 單一登入 (SSO) 來取代 Windows 網域內部託管的 Web 應用程式的 NTLM。

為測試服務 (setspn -s) 建立服務主體名稱 (SPN) 後,我可以清楚地看到 - 使用 Fiddler 或 WireShark - 驗證已從 NTLM 切換到 Kerberos。

擁有一支謹慎的基礎架構團隊,我想證明可以快速輕鬆地撤銷變更。我不希望透過 Web 伺服器配置強制 NTLM。相應地,SPN 被刪除 (setspn -d) 並確認其刪除 (setspn -q)。

我執行以下命令來刪除客戶端上的所有服務票證:

C:\>klist purge

Current LogonId is 0:0x521ac
        Deleting all tickets:
        Ticket(s) purged!

C:\>

當與 Web 應用程式進行進一步互動時,將建立另一個服務票證,並且 Kerberos 繼續作為 SSO 驗證機制。對於以前沒有使用過該服務的用戶來說也是如此。即使所有互動都閒置一夜(12-14 小時)後的第二天也是如此。

儘管我反覆尋找對所觀察到的持久性的解釋,但我卻空手而歸。不過我想我在這篇文章中找到了線索;如果使用者名稱已更改,LsaLookupSids 函數可能會傳回舊使用者名稱而不是新使用者名稱

本機安全機構 (LSA) 將 SID 和使用者名稱之間的對應快取在網域成員電腦上的本機快取。快取的使用者名稱不與網域控制器同步。網域成員電腦上的LSA首先查詢本機SID快取。如果本機 SID 快取中已存在現有映射,則 LSA 將傳回快取的使用者名稱訊息,而不是查詢網域控制器。此行為旨在提高效能。

快取條目確實會逾時,但是應用程式的重複查詢可能會在​​快取條目的最大生命週期內使現有快取條目保持活動狀態。

任何人都可以確認金鑰分發中心 (KDC) 是否以類似的方式快取 SPN 條目(或提供替代解釋)?如果是的話,快取條目的最大生命週期是多少?

答案1

我發現了問題。該服務的 DNS 記錄不是「A」記錄,實際上是「CNAME」記錄。這意味著瀏覽器正在為服務帳戶建立金鑰。這與網站/伺服器上設定為「False」(預設值)的「useAppPoolCredentials」設定有關。我要對其進行更改的 SPN 沒有參與正在進行的 Kerberos 身份驗證。

相關內容