我有一个 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 本身的问题。
答案1
根据 Windows 管理员的建议,我执行以下操作解决了该问题。
- 确保 W32Time 服务正在使用 NTP(但实际上没有)
- 确保所有更新均已安装(已安装)
- 确保所有服务都在服务帐户下运行,而不是域控制器帐户下运行(它们不是)
- 确保 ADFS 在服务帐户下运行后,重新创建服务提供商
此时,错误仅发生在部分 AD 用户身上。对于这些用户,我重置了他们的密码,问题就解决了。
虽然我不完全确定为什么会发生这种情况或这些步骤如何修复它,但我的理论是,不使用一个服务帐户来管理所有内容导致写入的文件无法由在不同帐户下运行的进程读取。
希望这对某人有帮助。
更新:
导致该错误的另一个可能的原因是,如果您将 Active Directory 中的 UPN 更改为包含空格的字符串,就会出现此错误。
第二次更新:
使用无效的域也会导致此错误。