Невозможно авторизоваться, используя клиент API Google для доступа к API чата Hangouts - PullRequest
0 голосов
/ 28 апреля 2020

Я использую google.api.client версии 1.30.9. Я хочу проверить подлинность своих запросов с помощью Hangout Chat Api перед отправкой. В официальном do c https://developers.google.com/api-client-library/java/google-api-java-client/oauth2 Google использовал GoogleCredential, но теперь он устарел. Я использую следующий код для получения аутентифицированного объекта учетных данных, который можно использовать для создания объекта HangoutChat.

private static Credential authorize() throws Exception {
        httpTransport=GoogleNetHttpTransport.newTrustedTransport();
        dataStoreFactory = new FileDataStoreFactory(DATA_STORE_DIR);
        // load client secrets
        GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY,
                new InputStreamReader(HangoutsChat.class.getResourceAsStream("/client_secrets.json")));
        // set up authorization code flow
        GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
                httpTransport, JSON_FACTORY, clientSecrets,
                Collections.singleton(HangoutsChat.DEFAULT_BASE_URL)).setDataStoreFactory(dataStoreFactory)
                .build();
        // authorize
        return new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user");

    }

AuthorizationCodeInstalledApp и LocalServerReceiver и недоступны в последней версии API Google. Как я могу пройти аутентификацию, прежде чем запрашивать использование чата с API.

1 Ответ

1 голос
/ 28 апреля 2020

Вы заявляете, что пытаетесь использовать учетную запись службы, но используемый вами код был разработан для веб-приложения для входа в систему с использованием Oauth2. Это не будет работать с учетными данными учетной записи службы. Необходимо использовать правильный код с учетными данными типа corect.

служебная учетная запись

HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
...
// Build service account credential.

GoogleCredential credential = GoogleCredential.fromStream(new FileInputStream("MyProject-1234.json"))
    .createScoped(Collections.singleton(PlusScopes.PLUS_ME));
// Set up global Plus instance.
plus = new Plus.Builder(httpTransport, jsonFactory, credential)
    .setApplicationName(APPLICATION_NAME).build();
...

Явная загрузка учетных данных

Google auth libray

Чтобы получить учетные данные из служебной учетной записи JSON используйте ключ GoogleCredentials.fromStream (InputStream) или GoogleCredentials.fromStream (InputStream, HttpTransportFactory). Обратите внимание, что учетные данные должны быть обновлены до того, как токен доступа станет доступен.

GoogleCredentials credentials = GoogleCredentials.fromStream(new FileInputStream("/path/to/credentials.json"));
credentials.refreshIfExpired();
AccessToken token = credentials.getAccessToken();
// OR
AccessToken token = credentials.refreshAccessToken();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...