尝试访问oauth2服务器时,收到范围不足的异常

时间:2019-06-20 13:47:41

标签: java spring spring-boot oauth-2.0

当前,我正在使用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服务器接收访问令牌并从那里检索资源。

代码中是否缺少任何内容?

0 个答案:

没有答案