Spring Security 获取错误“java.lang.IllegalArgumentException:samlRequest不能为null或空”

qcuzuvrc  于 2023-03-30  发布在  Spring
关注(0)|答案(1)|浏览(285)

我尝试使用“Saml2RedirectAuthenticationRequest”类生成响应重定向,但当我进行重定向时,我得到以下错误:

java.lang.IllegalArgumentException: samlRequest cannot be null or empty

我知道,我必须创建一个samlRequest对象,但我找不到任何文档说明这种情况。下面是我用来生成请求重定向的示例代码:

Saml2RedirectAuthenticationRequest authnRequest = Saml2RedirectAuthenticationRequest
                    .withRelyingPartyRegistration(relyingPartyRegsitration)
                    .relayState(relayState)
                    .build();

String encodedRequest = URI.create(authnRequest.getAuthenticationRequestUri().toString()).toASCIIString();
response.sendRedirect(encodedRequest);
nue99wik

nue99wik1#

出现错误的原因是Saml2RedirectAuthenticationRequest要求您在构造samlRequest时指定已签名和序列化的samlRequest
Saml2RedirectAuthenticationRequest是保存身份验证请求的域对象,而不是创建、签名和序列化身份验证请求的对象。
创建、签名和序列化的组件是Saml2AuthenticationRequestResolver。当给定一个HttpServletRequest时,它返回一个Saml2RedirectAuthenticationRequest。您可以在Spring Security's documentation中阅读有关此内容的更多信息。
我建议使用Spring Security的filter chain来为您创建和发送AuthnRequest,而不是直接制定它。当您在HttpSecurity设置中使用saml2Login DSL方法时,或者当您配置Sping Boot for SAML时,当您重定向到/saml2/authenticate/{registrationId}时,这一切都会为您完成。
您可以看到Spring Security's Boot sample已经完全配置了SAML 2.0 Login和Logout。

相关问题