При попытке доступа к серверу oauth2 получено исключение «Недостаточная область действия» - PullRequest
0 голосов
/ 20 июня 2019

В настоящее время я занимаюсь разработкой внутреннего сервера с использованием среды загрузки Spring. Когда я пытаюсь получить токен доступа с сервера oauth2.

Я получил AccessDeniedException: Недостаточная область действия для этого ресурса исключение на стороне сервера Oauth2. Со стороны сервера я получил 401 неавторизованное сообщение с сервера OAuth.

Прежде всего, я использовал библиотеку модернизации для доступа к серверу oauth2 для получения токена доступа.

После этого я изменил способ доступа к внешнему API, не завися от библиотеки дооснащения. Затем я использовал стандартную библиотеку пружины.

Вот код поиска токена. Я думаю, что в этом коде чего-то не хватает.

        restTemplate = new RestTemplate();

        // api-client:
        String credentials = endpointConfig.getOAuth().getCredentials();
        String encodedCredentials = Base64.encodeBase64String(credentials.getBytes());

        HttpHeaders headers = new HttpHeaders();
        headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
        headers.add("Authorization", "Basic " + encodedCredentials);

        HttpEntity<String> request = new HttpEntity<>(headers);
        StringBuilder accessTokenUrl = new StringBuilder("http://localhost:8080/oauth/token");
        accessTokenUrl.append("&grant_type=client_credentials");
        accessTokenUrl.append("&scope=read");

        ResponseEntity<TokenResponse> response = restTemplate.exchange(accessTokenUrl , HttpMethod.POST, request, TokenResponse.class);
        return response.getBody();

Конфигурация сервера OAuth2 показана ниже. Я предполагаю, что приведенный ниже код работает.

    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients.inMemory().withClient("api-client")
                .authorizedGrantTypes("client_credentials")
                .authorities("ROLE_CLIENT", "ROLE_TRUSTED_CLIENT")
                .scopes("read", "write", "trust").resourceIds("members-api")
                .accessTokenValiditySeconds(5 * 60)
                .secret("secret");
    }

Мне нужно получить токен доступа с сервера OAuth2 и получить ресурсы оттуда.

Чего-нибудь не хватает в коде?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...