Интегрируйте Spring SAML с Oauth2, токеном для доступа к REST API

Интегрируйте Spring SAML с токеном Oauth2 для доступа к REST API

С помощью расширения Spring SAML я могу настроить аутентификацию SAML и вернуть утверждение в SP, следуя ссылка,

теперь он возвращается к этому «/ landing» и получает объект утверждения и аутентификации в SAMLUserDetailsService и SAMLAuthenticationProvider, объект UserDetails заполняется в SAMLUserDetailsService.

@Bean
    public SavedRequestAwareAuthenticationSuccessHandler successRedirectHandler() {
        SavedRequestAwareAuthenticationSuccessHandler successRedirectHandler =
                new SavedRequestAwareAuthenticationSuccessHandler();
        successRedirectHandler.setDefaultTargetUrl("/landing");
        return successRedirectHandler;
    }

Теперь мой вопрос: как я могу сгенерировать токен аутентификации? с этого момента, пока нет подробностей, которые я пробовал, создал настраиваемый фильтр, который перехватывает "/ landing" и пытался изменить URL-адрес на / oauth / token? grant_type = urn: ietf: params: oauth: grant-type : saml2-bearer & assertion = AssertionToBase64Url (следовал), но не смог сгенерировать токен. Моя текущая конфигурация, безопасность Spring с реализацией oauth и spring saml также работают независимо, поэтому теперь я хочу использовать эти две функции вместе.

мой ResourceServerConfiguration.java

@Configuration
@EnableResourceServer
public class ResourceServerConfiguration extends ResourceServerConfigurerAdapter {

    private static final String RESOURCE_ID = "my_rest_api";

    @Override
    public void configure(ResourceServerSecurityConfigurer resources) {
        resources.resourceId(RESOURCE_ID).stateless(false);
    }

    @Override
    public void configure(HttpSecurity http) throws Exception {
        http.
        anonymous().disable()
        .requestMatchers().antMatchers("/user/**")
        .and().authorizeRequests()
        .antMatchers("/user/**").access("hasRole('ADMIN')")
        .and().exceptionHandling().accessDeniedHandler(new OAuth2AccessDeniedHandler());
    }

}

мой AuthorizationServerConfiguration.java

@Configuration
@EnableAuthorizationServer
public class AuthorizationServerConfiguration extends AuthorizationServerConfigurerAdapter {

    private static String REALM="MY_OAUTH_REALM";

    @Autowired
    private TokenStore tokenStore;

    @Autowired
    private UserApprovalHandler userApprovalHandler;

    @Autowired
    @Qualifier("authenticationManagerBean")
    private AuthenticationManager authenticationManager;

    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {

        clients.inMemory()
            .withClient("my-trusted-client")
            .authorizedGrantTypes("password", "authorization_code", "refresh_token", "implicit")
            .authorities("ROLE_CLIENT", "ROLE_TRUSTED_CLIENT")
            .scopes("read", "write", "trust")
            .secret("secret")
            .accessTokenValiditySeconds(120).//Access token is only valid for 2 minutes.
            refreshTokenValiditySeconds(600);//Refresh token is only valid for 10 minutes.
    }

    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        endpoints.tokenStore(tokenStore).userApprovalHandler(userApprovalHandler)
                .authenticationManager(authenticationManager);
    }

    @Override
    public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception {
        oauthServer.realm(REALM+"/client");
    }

}

Может ли кто-нибудь предложить, как это интегрировать, чтобы аутентификация, выполненная в IDP, и возврат к SP после успешного утверждения (часть авторизации выполнена) от IDP генерировали доступ для аутентификации, обновляли токен, с этим пользователем токена, который мог получить доступ к api. Может ли кто-нибудь предоставить какое-то решение ...


person user_vs    schedule 18.01.2018    source источник


Ответы (1)


Некоторое время назад я столкнулся с той же проблемой, и, разобравшись с ней, я написал статью (которую нельзя здесь разместить ...). По сути, ваш сервер авторизации oAuth является «мостом», который адаптирует ваш сервер SAML к oAuth, и наоборот ... его можно найти здесь:

Как интегрировать-Spring- oAuth-with-Spring-SAML

В GitHub также есть репо со всеми исходниками, например:

https://github.com/OhadR/spring-oAuth2-SAML-integration

Я знаю, что это просто ссылки, но опять же - статья слишком длинная и подробная.

person OhadR    schedule 21.02.2018
comment
спасибо за ответ, не могли бы вы объяснить конфигурацию OAuth2, которая выдает токен доступа, по истечении срока действия токена доступа получить токен из токена обновления полного потока oauth2. в приведенной выше ссылке нет конфигурации Oauth2. - person user_vs; 23.02.2018
comment
вы видели статью ?? codeproject.com/Articles/598581/ - person OhadR; 23.02.2018