当前,我正在使用Spring Boot框架开发后端服务器。 当我尝试从oauth2服务器检索访问令牌时。
我收到了 AccessDeniedException:Oauth2服务器端该资源的作用域不足异常。在后端,我从OAuth服务器收到了 401未经授权的消息。
首先,我正在使用改造库来访问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服务器接收访问令牌并从那里检索资源。
代码中是否缺少任何内容?