В 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.

Когда я пытался, с помощью дебага, узнать в чём ошибка - я обнаружил это: Дебаг класса OAuth2ExpressionUtils В метод 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;
    }
}

Ответы (0 шт):