期望 Saml2AuthenticationToken 但在 spring-security-saml2-service-provider 中获得匿名

问题描述 投票:0回答:1

在登录中,使用 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 .nl/saml2/authenticate/surf 调用(我的 yml 文件中的依赖方注册是 surf),yml 断言方实体 ID 是 http url .nl/:saml2/ service-provider-metadata/surf(与 SURFconext 中配置的实体 ID 完全相同)。 yml 文件中的 singlesignon.url 是 SURFconext 提供的测试 url (

singlesignon.url: https://engine.test.surfconext.nl/authentication/idp/single-sign-on/key:<key>
)。 在 SURFconext 配置的 ACS 位置(身份验证后需要将用户发送回的端点)是 https url .nl/federation/saml/SAMLAssertionConsumer 这对应于我的 AssertionConsumer 中的 (
@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 spring-security-saml2
1个回答
-1
投票

这个问题你解决了吗?我在 java 8 和基于 java 的 saml2 配置中遇到了同样的问题。 在我的过滤器链中,我有 saml2AuthenticationFilter,但不起作用..因此使用了匿名身份验证文件管理器。 问题可能出在证书上吗?

© www.soinside.com 2019 - 2024. All rights reserved.