SAML 注销时出现 ADFS NullReference 异常(事件 303)

ADFS NullReference exception on SAML logout (event 303)

我使用 Spring-Security-Saml 示例应用程序作为 SP,ADFS 2.0 作为 IdP。我遵循了此处描述的说明 http://docs.spring.io/autorepo/docs/spring-security-saml/1.0.x-SNAPSHOT/reference/htmlsingle/ 。设置后我可以登录系统,但在全局注销时 ADFS 抛出 NullReferenceException(事件 ID 303):

System.NullReferenceException: Object reference not set to an instance of an object.
   at Microsoft.IdentityServer.Service.SamlProtocol.SingleLogoutService.LogoutNextSessionParticipant()
   at Microsoft.IdentityServer.Service.SamlProtocol.SingleLogoutService.ProcessLogoutRequest(LogoutRequest logoutRequest, Boolean& validLogoutRequest)
   at Microsoft.IdentityServer.Service.SamlProtocol.SingleLogoutService.ProcessMessage(SamlMessage samlMessage, BindingInformation bindingInformation, Boolean validResponseMessage, Boolean& validLogoutRequest)

我 运行 遇到了同样的问题,除了我的情况,我使用的是 ADFS 3.0。告诉 Spring 安全 SAML 签署注销响应为我修复了它。这是通过将 ExtendedMetadata bean 上的 requireLogoutResponseSigned 设置为 true 来配置的。


空引用错误消息不是很有用。当我在 C:\Windows\ADFS\Microsoft.DeviceRegistration.ServiceHost.exe.config 文件中启用跟踪时,我在事件查看器的跟踪日志中收到以下错误消息。

Microsoft.IdentityServer.Protocols.Saml.SamlProtocolSignatureVerificationException: MSIS7074: SAML authentication request for the WebSSO profile must specify an issuer with no NameQualifier, SPNameQualifier or SPProvidedId properties.
   at Microsoft.IdentityServer.Web.Protocols.Saml.SamlProtocolManager.ValidateSignatureRequirements(SamlMessage samlMessage)
   at Microsoft.IdentityServer.Web.Protocols.Saml.SamlProtocolManager.Logout(HttpSamlMessage logoutMessage, String sessionState, String logoutState, Boolean partialLogout, Boolean isUrlTranslationNeeded, HttpSamlMessage& newLogoutMessage, String& newSessionState, String& newLogoutState)

搜索它会得到一些更有用的结果。

SLO. Error MSIS7074 on ADFS

https://social.msdn.microsoft.com/Forums/vstudio/en-US/85b1a66f-ca0b-4ed6-a32f-c8dca4fdd6c7/slo-error-msis7074-on-adfs?forum=Geneva