我正在做一个作业,其中我必须实现OAuth Client,它将向auth服务器发出请求以获取访问令牌。
我已经通过RestTemplate实现了它。从那以后,我得到了有关authserver的一些信息,例如uri,grant-type,客户密码。根据这些信息,我创建了一个请求,该请求将返回正确的访问令牌。
但是现在,要求是向请求服务器添加范围。有人可以帮我按以下代码在请求中添加此范围的地方。 ?我试图添加此标题和地图。但我收到错误的请求错误。
class AuthTokenManager {
private ResponseEntity<String> requestToAuthServer(AuthServerInfo authServerInfo) {
//prepare request
final HttpEntity<MultiValueMap<String, String>> request =
new HttpEntity<>(prepareOAuthRequestBody(authServerInfo), prepareOAuthRequestHeader(authServerInfo));
// requesting auth-server for token
final ResponseEntity<String> response =
restTemplate.postForEntity(
authServerInfo.getOAuthAccessTokenUri(),
request,
String.class
);
return response;
}
private MultiValueMap<String, String> prepareOAuthRequestBody(AuthServerInfo authServerInfo) {
//prepare request body
final MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
map.add(GRANT_TYPE, authServerInfo.getOAuthGrantType());
map.add(CLIENT_ID, authServerInfo.getOAuthClientId());
// map.add(SCOPE, authServerInfo.getOAuthScopes());
return map;
}
private String prepareEncodedCredentials(AuthServerInfo authServerInfo) {
//prepare authorization attribute for header.
final String credentials = authServerInfo.getOAuthClientId() + ":" +
authServerInfo.getOAuthClientSecret();
return StringUtils.str(Base64.encodeBase64(StringUtils.bytes(credentials)));
}
private HttpHeaders prepareOAuthRequestHeader(AuthServerInfo authServerInfo) {
// prepare request header
final HttpHeaders headers = new HttpHeaders();
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
headers.add(AUTHORIZATION, BASIC + prepareEncodedCredentials(authServerInfo));
headers.add(HttpHeaders.CONTENT_TYPE, URLENCODED);
headers.setCacheControl(CACHE_CONTROL);
return headers;
}
}