在登录中,使用 spring-security-saml2-service-provider 成功进行身份验证后,我期望一个 Saml2AuthenticationToken (或从包含用户详细信息派生的东西),但我得到一个 AnonymousAuthenticationToken (已验证为 true)。 调试时,我没有遇到一些我期望的断点,并且在调试时单步执行(spring)代码并没有给我带来任何想法或替代路线。
我按照SAML 2.0 登录概述设置了 SAML 2.0 登录。版本5.8而不是6.x,因为我只能使用Java 8。我在maven项目中使用SpringBoot(spring-boot-starter-parent 2.7.14)和spring-security-saml2-service-provider 5.8.2。
除了 application.yml 文件和 SecurityFilterChain 中的配置(使用 saml2Login(withDefaults))之外,几乎没有任何自己的代码。
我使用 SURFConext 作为中介。
“我的”登录服务由 https url
singlesignon.url: https://engine.test.surfconext.nl/authentication/idp/single-sign-on/key:<key>
)。
在 SURFconext 配置的 ACS 位置(身份验证后需要将用户发送回的端点)是 https url @RequestMapping("/federation/saml/SAMLAssertionConsumer"
)。
我在 Chrome 开发人员窗口中跟踪 SAML 扩展中发生的情况。我可以看到那里的流程,如概述中所示。我在 2 个 GETS 和 2 个 POSTS 中看到 saml 消息(更多非 saml GETS(主要是重定向),这里不重要提及)。
我在第一个 POST saml 消息中看到我的 IDP 返回了登录人员的正确数据,在第二个 POST 中 SURFconext 提供了我的应用程序所需的 saml 数据部分。 但我实际上在 AssertionConsumer 中返回的是 spring-security-core AnonymousAuthenticationToken (已验证为 true),而不是 spring-security-saml2-service-provider Saml2AuthenticationToken。我需要用户的详细信息,但我没有得到它们,尽管我在 chrome saml 扩展中看到它们。
我尝试实现 UserDetailsService 或配置自己的转换器,但我所做的任何尝试都没有让我更接近原因或解决方案。
这个问题你解决了吗?我在 java 8 和基于 java 的 saml2 配置中遇到了同样的问题。 在我的过滤器链中,我有 saml2AuthenticationFilter,但不起作用..因此使用了匿名身份验证文件管理器。 问题可能出在证书上吗?