SAML SP 和 ADFS IdP 之间的 SSO 问题

Issue with SSO between SAML SP and ADFS IdP

我们正在开发一个 Web 应用程序,它提供多种登录机制,例如 LDAP、Kerberos、SAP 登录票证以及 SAML。

为此,我们使用了 Spring 安全框架,它(大部分)非常棒!

几个月前,我们向我们的应用程序添加了 SAML 支持,并使用外部 IdP (SSOcircle) 对其进行了测试。我们还与 SSOcircle 的首席执行官密切合作,让我们振作起来 运行。

一切正常,我们认为我们可以为我们的第一个现实生活中的客户注册 SAML。

所以我们在 linux 机器上设置了测试服务器 (SP),并配置了我们的部分(我们使用了这个文档:http://docs.spring.io/spring-security-saml/docs/current/reference/html/chapter-idp-guide.html)并等待我们的客户完成他们的部分。

但是当他们尝试通过 SSO 进入我们的应用程序(他们使用 ADFS)时,我们 运行 遇到了问题。

因为现在,我们得到了两条错误消息中的一条。要么这个

Authentication request failed: org.springframework.security.core.userdetails.UsernameNotFoundException: Empty username not allowed!

或者这个

Error validating SAML message org.opensaml.common.SAMLException: NameID element must be present as part of the Subject in the Response message, please enable it in the IDP configuration

在故障排除期间,我在 Whosebug 上遇到了这些其他线程:

SAMLException: NameID element must be present as part of the Subject in the Response message, please enable it in the IDP configuration

Configuring ADFS 3.0 / SAML 2.0 to work with Spring Security for SSO integration

奇怪的是,仅当我们将 adfs 声明规则从 "Outgoing claim type" 更改为 "Pass Through claim type" 时,第二个错误消息(关于 nameid)元素才会出现。

现在,我不知道从哪里继续我的故障排除。关于这个问题有什么想法或想法吗?

此致 雷内

EDIT1:我将 link 附加到调试日志文件和我们的 saml 安全配置

EDIT2:有人知道是否有办法指定 SAML 应该使用的时区吗?现在,祖鲁时间似乎是使用的时区,尽管我们的 OS 配置为使用 CET/CEST。因此我们不得不为 login/logout.

使用 responseSkew 参数

EDIT3:删除了调试和配置,因为我们解决了问题

好的,我们解决了问题。

在实时调试期间,我们注意到 NameID 不是 作为 SAML 断言属性 key/value 对发送,而是作为 "standalone" key/value 发送SAML 断言中的对 "header".

因此我们修改了代码以涵盖 SAML 断言中的两个可能位置,现在它工作得很好。 :D