【问题标题】:Issue with SSO between SAML SP and ADFS IdPSAML SP 和 ADFS IdP 之间的 SSO 问题
【发布时间】:2017-02-06 16:57:56
【问题描述】:

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

为此,我们使用 Spring Security Framework,它(大部分)工作得非常好!

几个月前,我们为我们的应用程序添加了 SAML 支持,并使用外部 IdP (SSOcircle) 对其进行了测试。我们还与 SSOcircle 的 CEO 密切合作,以帮助我们启动和运行。

一切正常,我们认为我们可以向我们的第一个真实客户注册 SAML。

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

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

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

身份验证请求失败: org.springframework.security.core.userdetails.UsernameNotFoundException: 不允许使用空用户名!

或者这个

验证 SAML 消息 org.opensaml.common.SAMLException 时出错: NameID 元素必须作为主题的一部分出现在响应中 消息,请在 IDP 配置中启用它

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

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

NameID element must be present as part of the Subject

奇怪的是,只有当我们将 adfs 声明规则从“传出声明类型”更改为“传递声明类型”时,才会出现第二条错误消息(关于 nameid)元素。

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

最好的问候 勒内

EDIT1:我附上了调试日志文件和我们的 saml 安全配置的链接

EDIT2:有人知道是否有办法指定 SAML 应该使用的时区吗?现在,Zulu 时间似乎是使用的时区,尽管我们的操作系统配置为使用 CET/CEST。因此我们必须使用 responseSkew 参数来登录/注销。

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

【问题讨论】:

  • 对那个“奇怪的事情”的疯狂猜测:可能是当您更改声明规则类型时,发出映射到 NameId 的声明被过滤掉了,从而停止发出 nameid。
  • 谢谢,这是个好主意。在调试过程中我会记住这一点。 :)

标签: spring spring-security saml-2.0 adfs spring-saml


【解决方案1】:

好的,我们解决了问题。

在实时调试期间,我们注意到 NameID不是作为 SAML 断言属性键/值对发送,而是作为 SAML 断言“标头”中的“独立”键/值对发送。 p>

所以我们修改了代码以涵盖 SAML 断言中的两个可能位置,现在它可以正常工作了。 :D

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-22
    • 2015-04-19
    • 1970-01-01
    • 1970-01-01
    • 2012-09-28
    • 2014-10-28
    • 1970-01-01
    • 2015-04-19
    相关资源
    最近更新 更多