В настоящее время я занимаюсь разработкой внутреннего сервера с использованием среды загрузки 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 и получить ресурсы оттуда.
Чего-нибудь не хватает в коде?