Ich habe 3 AnwendungenWie oauth2 Token vom Benutzer (authorization_code) in einer Ruhe Vorlage
- Frontend-Anwendung
- OAuth2 Authentifizierungsserver
- REST-API (RepositoryRestResources)
wiederzuverwenden Meine Benutzer müssen sich anmelden, bevor sie die Frontend-Anwendung verwenden können. Dies geschieht durch SSO. Sie erhalten ein Token, das vom Kunden validiert wird, bevor es eingelassen wird.
Ich möchte dieses Token wiederverwenden, um API-Anfragen zu stellen. Meine REST-API-Anwendung ist mit demselben SSO-Login gesichert (es ist eine Ressource für den Frontend-Client), aber ich habe keine Ahnung, wie ich den Autorisierungsheader hinzufügen soll, der in der RestTemplate für API-Anfragen verwendet werden soll.
Ich eröffne mein restTemplate wie folgt aus:
public static RestTemplate build()
{
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
mapper.registerModule(new Jackson2HalModule());
mapper.registerModule(new JavaTimeModule());
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converter.setSupportedMediaTypes(MediaType.parseMediaTypes("application/hal+json"));
converter.setObjectMapper(mapper);
return new RestTemplate(Arrays.asList(converter));
}
meine Ressource-Server-Konfiguration:
@Configuration
@EnableResourceServer
public class ResourceServerConfiguration extends ResourceServerConfigurerAdapter
{
@Value("${resource.id}")
private String resourceId;
@Override
public void configure(HttpSecurity http) throws Exception
{
http
.authorizeRequests()
.antMatchers(HttpMethod.OPTIONS).permitAll()
.anyRequest().authenticated()
.and().exceptionHandling().accessDeniedHandler(new OAuth2AccessDeniedHandler());
}
@Override
public void configure(ResourceServerSecurityConfigurer resources) throws Exception
{
resources.resourceId(resourceId);
}
@Bean
public static TokenEnhancer tokenEnhancer()
{
return new JwtTokenEnhancer();
}
@Bean
public static JwtAccessTokenConverter accessTokenConverter()
{
KeyStoreKeyFactory keyStoreKeyFactory = new KeyStoreKeyFactory(new ClassPathResource("keystore.jks"), "somesecret".toCharArray());
JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
converter.setKeyPair(keyStoreKeyFactory.getKeyPair("pair"));
return converter;
}
@Bean
public static TokenStore tokenStore()
{
return new JwtTokenStore(accessTokenConverter());
}
}
Mein api korrekt eingerichtet ist. Das Problem ist, dass die Ruhevorlage des Clients die Authentifizierung nicht "verwendet" oder den Autorisierungsheader nicht mit seinen Anforderungen sendet. –