OAuth客户端实施中对AuthServer的请求范围

时间:2020-07-23 09:17:07

标签: java spring spring-security oauth resttemplate

我正在做一个作业,其中我必须实现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;
    }

}

0 个答案:

没有答案
相关问题