В Spring Security #oAuth2.hasSope приходит UsernamePasswordAuthenticationToken, а не OAuth2Authentication
Я пишу приложение на Spring Boot, которое использует Spring Security и oAuth 2.0. Создал пробный контролер в котором проверяю, есть ли у авторизованного пользователя Scope user_info. Ответ всегда false, хотя должен быть true.
Тестовый контролер:
@RestController
public class TestController {
@GetMapping("/rest/test")
@PreAuthorize("#oauth2.hasScope('user_info')")
public String test() {
return "test";
}
}
При каждой попытке запроса вылетает org.springframework.security.access.AccessDeniedException.
Когда я пытался, с помощью дебага, узнать в чём ошибка - я обнаружил это:
В метод hasScope приходит UsernamePasswordAuthenticationToken, хотя ожидается OAuth2Authentication.
Мои настройки сервера авторизации:
@Configuration
@AllArgsConstructor
@EnableAuthorizationServer
public class AuthServerConfig extends AuthorizationServerConfigurerAdapter {
private OAuthService oAuthService;
@Override
public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
security.tokenKeyAccess("permitAll()")
.checkTokenAccess("isAuthenticated()");
}
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients.withClientDetails(oAuthService);
}
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
endpoints
.tokenEnhancer(tokenEnhancer())
.userApprovalHandler(userApprovalHandler());
}
@Bean
public UserApprovalHandler userApprovalHandler() {
return new DefaultUserApprovalHandler();
}
@Bean
public TokenEnhancer tokenEnhancer() {
var customTokenEnhancer = new CustomTokenEnhancer();
var chain = new TokenEnhancerChain();
chain.setTokenEnhancers(Collections.singletonList(customTokenEnhancer));
return chain;
}
}