spring saml2 saml2 WebSoAuthenticationFilter自定义authenticationsuccesshandler

gblwokeq  于 2021-09-29  发布在  Java
关注(0)|答案(1)|浏览(382)

我正在使用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();

我想我可以以某种方式像以前那样做,但是对于提供的所有文档,很难理解其中的大部分内容。
非常感谢。

aurhwmvo

aurhwmvo1#

试试这样的,对我很管用。saml2login(saml2->{saml2.authenticationmanager(新providermanager(authenticationprovider));saml2.defaultsuccessurl(“url”)})

相关问题