У меня есть конфигурация oauth client
resttemplate
, как показано ниже. Я получаю следующее исключение. Я исследовал, и есть много областей, которые одно и то же исключение, но не в состоянии решить эту проблему. Также существует проблема с тем же исключением здесь , но нет разрешения. Я использую
Нет аутентификации клиента. Попробуйте добавить соответствующий
фильтр аутентификации.
@Bean
@Qualifier("clientOnlyFullAcessDetails")
public OAuth2ProtectedResourceDetails clientOnlyFullAcessDetails() {
ClientCredentialsResourceDetails resource = new ClientCredentialsResourceDetails();
resource.setAccessTokenUri(tokenUrl);
resource.setClientId(clientId);
resource.setClientSecret(clientSecret);
resource.setScope(Collections.singletonList(ClientScope.server.name()));
resource.setClientAuthenticationScheme(AuthenticationScheme.header);
resource.setAuthenticationScheme(AuthenticationScheme.header);
return resource;
}
@Bean
@Qualifier("clientOnlyRestTemplate")
public OAuth2RestTemplate clientOnlyRestTemplate() {
OAuth2RestTemplate template = new OAuth2RestTemplate(clientOnlyFullAcessDetails(),
new DefaultOAuth2ClientContext(new DefaultAccessTokenRequest()));
template.setAccessTokenProvider(clientAccessTokenProvider());
return template;
}
@Bean
public AccessTokenProvider clientAccessTokenProvider() {
ClientCredentialsAccessTokenProvider accessTokenProvider = new ClientCredentialsAccessTokenProvider();
accessTokenProvider.setRequestFactory(new SimpleClientHttpRequestFactory());
return accessTokenProvider;
}
Код моего сервера авторизации
private final BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) {
final TokenEnhancerChain tokenEnhancerChain = new TokenEnhancerChain();
tokenEnhancerChain.setTokenEnhancers(Arrays.asList(tokenEnhancer(), accessTokenConverter()));
// @formatter:off
endpoints
.tokenStore(tokenStore())
.tokenEnhancer(tokenEnhancerChain);
// .authenticationManager(authenticationManager);
// @formatter:on
}
@Bean
public TokenStore tokenStore() {
return new JwtTokenStore(accessTokenConverter());
}
@Bean
public JwtAccessTokenConverter accessTokenConverter() {
JwtAccessTokenConverter jwtAccessTokenConverter = new JwtAccessTokenConverter();
jwtAccessTokenConverter.setSigningKey("123");
// KeyStoreKeyFactory keyStoreKeyFactory = new KeyStoreKeyFactory(new ClassPathResource(keystoreFileUri),
// keystorePassword.toCharArray());
// jwtAccessTokenConverter.setKeyPair(keyStoreKeyFactory.getKeyPair(keystoreAlias));
return jwtAccessTokenConverter;
}
@Bean
@Primary
public DefaultTokenServices tokenServices() {
DefaultTokenServices defaultTokenServices = new DefaultTokenServices();
defaultTokenServices.setTokenStore(tokenStore());
defaultTokenServices.setSupportRefreshToken(true);
return defaultTokenServices;
}
@Bean
public TokenEnhancer tokenEnhancer() {
return new CustomTokenEnhancer();
}
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients.jdbc(datasource).passwordEncoder(passwordEncoder);
}
@Override
public void configure(AuthorizationServerSecurityConfigurer security) {
// @formatter:off
security
.tokenKeyAccess("permitAll()")
.checkTokenAccess("isAuthenticated()")
.passwordEncoder(passwordEncoder);
// @formatter:on
}
веб-безопасность для auth server
@Override
public void configure(HttpSecurity http) throws Exception {
// @formatter:off
HeadersConfigurer<HttpSecurity> headerSecutiy = http
.headers()
.frameOptions()
.disable();
ExpressionUrlAuthorizationConfigurer<HttpSecurity>.ExpressionInterceptUrlRegistry urlSecurity = headerSecutiy.and()
.csrf()
.disable()
.authorizeRequests()
.antMatchers("/oauth/token").permitAll();
urlSecurity
.anyRequest()
.authenticated();
urlSecurity.
and()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.exceptionHandling()
.accessDeniedHandler(new OAuth2AccessDeniedHandler());
// @formatter:on
}