Ошибка при получении токена доступа из GoogleCredential

#oauth-2.0 #google-api #access-token #credentials #google-oauth-java-client

#oauth-2.0 #google-api #токен доступа #учетные данные #google-oauth-java-client

Вопрос:

Я пытаюсь получить токен доступа, чтобы использовать Cloud SQL Admin API для экспорта таблицы в формате CSV в облачное хранилище Google. Я продолжаю получать эту ошибку: Scopes not configured for service account. Scoped should be specified by calling createScoped or passing scopes to constructor. каждый раз, когда я вызываю credentials.refreshAccessToken(); приведенный ниже код. Может ли кто-нибудь подсказать мне, что я здесь делаю не так

 
       Set<String> oAuthScopes = new HashSet<String>();
       oAuthScopes.add(SQLAdminScopes.CLOUD_PLATFORM);
       oAuthScopes.add(SQLAdminScopes.SQLSERVICE_ADMIN);

       GoogleCredentials credentials = GoogleCredentials.getApplicationDefault();
       credentials.createScoped(oAuthScopes);
       AccessToken access_token = credentials.refreshAccessToken();

        try {

            httppost.addRequestHeader("Content-Type", "application/json");
            httppost.addRequestHeader("Authorization", "Bearer "   access_token.getTokenValue());

            httppost.setRequestEntity(
                    new StringRequestEntity(
                            "{"exportContext":"  
                                    ""fileType": "CSV","  
                                    ""uri":"   EXPORT_BUCKET  
                                    ""databases": [""   DATABASE_NAME   ""],"  
                                    ""csvExportOptions": "  
                                    "{"  
                                    ""selectQuery":""   SQL_QUERY   "" "  
                                    "} "  
                                    "} "  
                                    "}",
                            "application/json",
                            "UTF-8"));

            httpclient.executeMethod(httppost);
            String response = new String(httppost.getResponseBody());
            httppost.releaseConnection();
        } catch (UnsupportedEncodingException unsupportedEncodingException) {
            unsupportedEncodingException.printStackTrace();
        }

  

Ответ №1:

Это исключение, по-видимому, связано с тем фактом, что стратегия авторизации учетных данных приложения по умолчанию для клиентских библиотек сработает, как только вы установите ‘GOOGLE_APPLICATION_CREDENTIALS’

Кроме того, вы можете создать учетные данные с ограниченной областью действия следующим образом:

 GoogleCredentials credentials = GoogleCredentials.getApplicationDefault().createScoped(Arrays.asList("https://www.googleapis.com/auth/cloud-platform"));