Google Dialogflow V2 - Аутентификация - токен доступа - PullRequest
0 голосов
/ 26 ноября 2018

Я использую Google Dialogflow V2 API для дизайна чат-бота.Чтобы передать заголовок Authorization в параметре запроса API Detect Intent, мне нужен динамический токен доступа.

Согласно официальной документации, мы должны установить gcloud на машину, которая мне не нужна.

Я хочу реализовать то же самое через Java, но получаю сообщение об ошибке.

Я перешел по ссылке: https://github.com/googleapis/google-auth-library-java и установил переменную среды для GOOGLE_APPLICATION_CREDENTIALS

Я использовал приведенный ниже фрагмент кода:

String GoogleCredentialsEnv = System.getenv("GOOGLE_APPLICATION_CREDENTIALS");

GoogleCredentials credentials = GoogleCredentials.fromStream(new FileInputStream("/Users/Downloads/testingbot-29671-d9229dd1e3f9.json"));
    credentials.createScoped(Arrays.asList("https://www.googleapis.com/auth/dialogflow"));

credentials.refreshIfExpired();
AccessToken token = credentials.getAccessToken();

//AccessToken token = credentials.refreshAccessToken();
System.out.println("Token is " + token);

, но в большинстве случаев я получаю ошибку ниже

Exception in thread "main" java.io.IOException: Scopes not configured for service account. Scoped should be specified by calling createScoped or passing scopes to constructor.
    at com.google.auth.oauth2.ServiceAccountCredentials.refreshAccessToken(ServiceAccountCredentials.java:363)
    at com.google.auth.oauth2.OAuth2Credentials.refresh(OAuth2Credentials.java:181)
    at com.google.auth.oauth2.OAuth2Credentials.refreshIfExpired(OAuth2Credentials.java:198)
    at com.Model.demo.getBotResponse(demo.java:60)
    at com.Model.demo.main(demo.java:40) 

Ответы [ 2 ]

0 голосов
/ 01 августа 2019

Попробуйте:

GoogleCredentials credentials = GoogleCredentials.fromStream(new FileInputStream("/Users/Downloads/testingbot-29671-d9229dd1e3f9.json"));

if (credentials.createScopedRequired()) {
    credentials = credentials.createScoped(Collections.singletonList("https://www.googleapis.com/auth/dialogflow"));
}

credentials.refreshIfExpired();
AccessToken token = credentials.getAccessToken();

System.out.println(token.getTokenValue());
0 голосов
/ 26 ноября 2018

Убедитесь, что используемая учетная запись службы создана для "Интеграции Dialogflow".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...