Active-Directory
SAML 服務提供商登錄時出現 ADFS 錯誤
我有一個已經開發了大約一個月的 Spring SAML 項目。我已與 ADFS 集成,一切執行良好。我遇到了一個間歇性錯誤,該錯誤正在成為問題,因為我必須等待它似乎決定重新開始工作。它現在顯示錯誤的頻率超過了它的工作頻率。使用任意數量的測試 AD 帳戶登錄後,我看到此錯誤。
事件日誌中的錯誤 ID 111
The Federation Service encountered an error while processing the WS-Trust request. Request type: http://schemas.microsoft.com/idfx/requesttype/issue Additional Data Exception details: System.ArgumentOutOfRangeException: Not a valid Win32 FileTime. Parameter name: fileTime at System.DateTime.FromFileTimeUtc(Int64 fileTime) at Microsoft.IdentityServer.Service.Tokens.LsaLogonUserHelper.GetPasswordExpiryDetails(SafeLsaReturnBufferHandle profileHandle, DateTime& nextPasswordChange, DateTime& lastPasswordChange)....
ADFS 事件日誌中的錯誤 364
Encountered error during federation passive request. Additional Data Protocol Name: Saml Relying Party: https://localhost:8443/elsso/saml/metadata/alias/serviceprovider Exception details: System.ArgumentOutOfRangeException: Not a valid Win32 FileTime. Parameter name: fileTime at System.DateTime.FromFileTimeUtc(Int64 fileTime) at Microsoft.IdentityServer.Service.Tokens.LsaLogonUserHelper.GetPasswordExpiryDetails(SafeLsaReturnBufferHandle profileHandle, DateTime& nextPasswordChange, DateTime& lastPasswordChange) at Microsoft.IdentityServer.Service.Tokens.LsaLogonUserHelper.GetLsaLogonUserInfo(SafeHGlobalHandle pLogonInfo, Int32 logonInfoSize, DateTime& nextPasswordChange, DateTime& lastPasswordChange, String authenticationType, String issuerName) at Microsoft.IdentityServer.Service.Tokens.LsaLogonUserHelper.GetLsaLogonUser(UserNameSecurityToken token, DateTime& nextPasswordChange, DateTime& lastPasswordChange, String issuerName)....
服務提供者、AD、ADFS、證書和 SAML 斷言的配置是正確的。當我沒有收到此錯誤時,至少它們 90% 的時間都在工作。
我在失敗時嘗試過的方法沒有幫助
- 重新啟動 ADFS 服務和虛擬伺服器
- 同步代理伺服器時間(不確定這到底是什麼意思,找到了一個 MS 文件,它針對錯誤類型 111 和 364 提出了建議)在 powershell w32tm /config /manualpeerlist:pool.ntp.org /syncfromflags:manual /update
- 與此相關的兩篇 StackOverflow 文章顯示了斷言元數據中的錯誤,並且不支持 SHA-256。我已經驗證了我的元數據並且正在使用 SHA-1。
- 我在任何 Microsoft 支持網站上都找不到與此問題直接相關的任何文章,但是,我是處理此類問題的新手,可能只是不知道在哪裡查找。
截至目前,它每隔幾個小時工作幾分鐘,然後在其餘時間失敗。
我真的很難過,任何有關解決此問題的方法的建議將不勝感激。
更新 我無法以本機方式登錄 ADFS,這進一步表明這不是服務提供商的問題,而是 ADFS/AD 本身的問題。
根據 Windows 管理員的建議,我做了以下解決問題的方法。
- 確保 W32Time 服務正在使用 NTP(不是)
- 確保已安裝所有更新(它們是)
- 確保所有服務都在服務帳戶下執行,而不是域控制器帳戶(它們不是)
- 確保 ADFS 在服務帳戶下執行後,重新創建服務提供程序
此時,該錯誤僅發生在一部分 AD 使用者身上。在這些使用者上,我重置了他們的密碼,然後解決了這個問題。
儘管我不完全確定為什麼會發生這種情況或這些步驟如何解決它,但我的理論是,不使用一個服務帳戶來管理所有這些會導致寫入的文件無法被在不同帳戶下執行的程序讀取.
希望這可以幫助某人。
更新:
另一個可能的錯誤原因是,如果您將 Active Directory 中的 UPN 更改為包含空格的字元串,則會顯示此錯誤。
第二次更新:
使用無效域也可能導致此錯誤。