我正在使用SpringSecurityV5.5.1SAML2代码来支持saml。我有一个使用旧的spring安全扩展的工作解决方案,但我正在“升级”。
我有sp启动和idp启动的流,但我不知道如何配置成功处理程序重定向url。默认为“/”。我不明白如何才能访问 Saml2WebSsoAuthenticationFilter
和/或 SavedRequestAwareAuthenticationSuccessHandler
以覆盖url。
我设置了默认值 RelayState
在idp上,它确实与Assert一起发送,但spring似乎没有使用它。
此外,使用较旧的扩展,我可以将saml请求存储在数据库中,并在收到响应时检索它,因为我的应用程序不使用会话。我在这里还没有找到一种方法来做同样的事情。
以下是我的身份验证提供商和中继方注册,如我找到的文档和样本所示:
OpenSaml4AuthenticationProvider authenticationProvider = new OpenSaml4AuthenticationProvider();
authenticationProvider.setAssertionValidator( OpenSaml4AuthenticationProvider.createDefaultAssertionValidator( assertionToken -> {
Map<String, Object> params = new HashMap<>();
params.put( CLOCK_SKEW, Duration.ofMinutes(10).toMillis());
String recipient = assertionToken.getToken().getRelyingPartyRegistration().getAssertionConsumerServiceLocation();
params.put( SAML2AssertionValidationParameters.SC_VALID_RECIPIENTS, Collections.singleton(recipient));
String audience = assertionToken.getToken().getRelyingPartyRegistration().getAssertionConsumerServiceLocation();
params.put( SAML2AssertionValidationParameters.COND_VALID_AUDIENCES, Collections.singleton( "blah"));
return new ValidationContext( params);
})
);
Converter<HttpServletRequest, RelyingPartyRegistration> relyingPartyRegistrationResolver =
new DefaultRelyingPartyRegistrationResolver( relyingPartyRegistrationRepository);
Saml2MetadataFilter filter = new Saml2MetadataFilter(
relyingPartyRegistrationResolver,
new OpenSamlMetadataResolver());
http
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.antMatchers( "/saml2/**").permitAll()
.antMatchers( "/login/**").permitAll()
.and()
.saml2Login( saml2 -> saml2.authenticationManager( new ProviderManager( authenticationProvider)))
.addFilterBefore( filter, Saml2WebSsoAuthenticationFilter.class);
RelyingPartyRegistration registration = RelyingPartyRegistration
.withRegistrationId("blah")
.assertionConsumerServiceLocation( getAssertionRecipient( environment, "blah"))
.signingX509Credentials( c -> c.add( credentialSp))
.decryptionX509Credentials( c -> c.add( decryptSp))
.assertingPartyDetails(party -> party
.entityId("blah")
.singleSignOnServiceLocation("https://sso.stuff/samlstuff")
.wantAuthnRequestsSigned( false)
.verificationX509Credentials( c -> c.add( credential))
)
.build();
我想我可以以某种方式像以前那样做,但是对于提供的所有文档,很难理解其中的大部分内容。
非常感谢。
1条答案
按热度按时间aurhwmvo1#
试试这样的,对我很管用。saml2login(saml2->{saml2.authenticationmanager(新providermanager(authenticationprovider));saml2.defaultsuccessurl(“url”)})