Интегрируйте 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. Может ли кто-нибудь предоставить какое-то решение ...