Я написал свой сервер OAuth2 для печи и могу успешно получить токены доступа с моего сервера, однако, когда дело доходит до клиента, он всегда возвращает «недопустимая ошибка токена».
Я искал и прочитал много статей, страниц и ссылок, таких как следующая ссылка:
Сервер ресурсов Spring Security OAuth2 всегда возвращает неверный токен
Пока я не могу решить проблему, вот мой код, и я был бы признателен, если бы вы мне помогли.
Конфигурация на сервере аутентификации:
@Configuration
public class OAuth2Config extends AuthorizationServerConfigurerAdapter {
private static final String SERVER_RESOURCE_ID = "oauth2-server";
private static InMemoryTokenStore tokenStore = new InMemoryTokenStore();
@Configuration
@EnableResourceServer
protected static class ResourceServer extends ResourceServerConfigurerAdapter {
@Override
public void configure( ResourceServerSecurityConfigurer resources ) throws Exception{
resources.tokenStore( tokenStore ).resourceId( SERVER_RESOURCE_ID );
}
@Override
public void configure( HttpSecurity http ) throws Exception {
http.requestMatchers().antMatchers("/user").and().authorizeRequests().antMatchers("/me").access("#oauth2.hasScope('read')");
}
} // ResourceServer
@Configuration
@EnableAuthorizationServer
protected static class AuthConfig extends AuthorizationServerConfigurerAdapter {
@Autowired
private AuthenticationManager authenticationManager;
@Override
public void configure( ClientDetailsServiceConfigurer clients ) throws Exception {
clients.inMemory()
.withClient( "insert_server" ) // name of client
.secret( "{noop}" + "123456" )
.authorizedGrantTypes( "refresh_token", "password", "client_credentials" )
.scopes( "webclient", "mobileclient" )
.resourceIds( SERVER_RESOURCE_ID )
.and().withClient("rest_server")
.secret( "{noop}" + "123456" )
.authorizedGrantTypes( "refresh_token", "password", "client_credentials" )
.scopes( "webclient", "mobileclient" )
.resourceIds( SERVER_RESOURCE_ID );
//System.out.println( encoder.encode("123456") );
}
@Override
public void configure( AuthorizationServerEndpointsConfigurer endPoints ) throws Exception {
/* endPoints
.authenticationManager( this.authenticationManager )
.userDetailsService( this.userDetailsService ); */
endPoints.authenticationManager( this.authenticationManager )
.tokenStore( tokenStore )
.approvalStoreDisabled();
}
} // AuthConfig
}
Класс веб-безопасности на сервере аутентификации:
@Configuration
public class WebSecutiryConfigurer extends WebSecurityConfigurerAdapter {
private BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
@Override
@Bean
public AuthenticationManager authenticationManagerBean( ) throws Exception {
return super.authenticationManagerBean();
}
@Override
@Bean
public UserDetailsService userDetailsServiceBean( ) throws Exception {
return super.userDetailsServiceBean();
}
@Override
protected void configure( AuthenticationManagerBuilder auth ) throws Exception{
auth.inMemoryAuthentication()
.withUser( "pswin ")
.password( "{noop}" + "123456" )
.roles( "USER" )
.and().withUser( "admin" ) // username
.password( "{noop}" + "123456" ) // password
.roles( "USER", "ADMIN" ); // roles
}
}
Конфиг клиента:
security.oauth2.client.client-id=rest_server
security.oauth2.client.client-secret=123456
security.oauth2.client.access-token-uri=http://localhost:8989/auth/oauth/token
security.oauth2.client.user-authorization-uri=http://localhost:8989/auth/oauth/authorize
security.oauth2.resource.user-info-uri=http://localhost:8989/auth/user
и мой контроллер:
@RestController
@RequestMapping( "/city" )
@EnableResourceServer
public class CityController {
private CityService cityService;
//! Constructor
CityController( CityService cityService ){
this.cityService = cityService;
}
@GetMapping( "/{city_id}" )
public CityDTO getCityByID( @PathVariable Long city_id ){
return new CityDTO( cityService.getByID( city_id ) );
}
@PreAuthorize("#oauth2.hasScope('webclient')")
@GetMapping ( "/" )
public PageDTO getAll( Pageable pageable ){
Page page = this.cityService.getAll( pageable );
return new PageDTO( page.map( ( city ) -> new CityDTO( (City)city ) ) );
}
}
Более подробная информация:
Java версия: 10
Пружинная версия: 2.0.4. ВЫПУСК
Версия Spring-cloud: Finchley.SR1