我有一个已经开发了大约一个月的 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 管理员的建议,我做了以下解决问题的方法。
此时,该错误仅发生在一部分 AD 用户身上。在这些用户上,我重置了他们的密码,然后解决了这个问题。
尽管我不完全确定为什么会发生这种情况或这些步骤如何解决它,但我的理论是,不使用一个服务帐户来管理所有这些会导致写入的文件无法被在不同帐户下运行的进程读取.
希望这可以帮助某人。
更新:
另一个可能的错误原因是,如果您将 Active Directory 中的 UPN 更改为包含空格的字符串,则会显示此错误。
第二次更新:
使用无效域也可能导致此错误。