2015-06-12 6 views
0

У меня есть потребительская учетная запись google формы «[email protected]», для которой у меня есть служебная учетная запись формы «[email protected]». Я пытаюсь использовать закрытый ключ, сгенерированный для этой учетной записи службы, для создания токена доступа, а затем может редактировать или просматривать календарь, связанный с «[email protected]». Код аутентификации:Не удалось извлечь токен доступа к учетной записи службы google

String emailAddress = "[email protected]"; 
    JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance(); 
    File file = new File("path to .p12 file"); 
    HttpTransport httpTransport = GoogleNetHttpTransport 
      .newTrustedTransport(); 
    GoogleCredential credential = new GoogleCredential.Builder() 
      .setTransport(httpTransport) 
      .setJsonFactory(JSON_FACTORY) 
      .setServiceAccountId(emailAddress) 
      .setServiceAccountPrivateKeyFromP12File(file) 
      .setServiceAccountScopes(
        Collections.singleton("https://www.googleapis.com/auth/calendar")) 
      .setServiceAccountUser("[email protected]") 
      .build(); 
    String accessToken = credential.getAccessToken(); 

Но маркер доступа генерируется является недействительным. У учетной записи службы есть разрешения на редактирование. Программа имеет доступ к файлу .p12. Любая подсказка относительно того, где я иду не так?

ответ

2

Я думаю, вы поняли хау учетных записей служб работы. Олицетворение пользователя работает только в домене Google Apps. Вы не можете использовать учетную запись службы для олицетворения учетной записи gmail.

+0

Тогда где я могу использовать учетную запись службы, созданную для учетной записи пользователя? Я убежден, что он работал так же, как и в домене приложений. – tinus91

+0

Ваша вера неверна. Фраза «учетная запись службы, созданная для учетной записи пользователя» не имеет смысла. Учетные записи служб не связаны с потребительскими счетами. – pinoyyid

+0

Вот почему я спросил, было ли то, что я считал неправильным, что такое использование учетной записи службы, созданной под учетной записью пользователя. Потому что я могу создать учетную запись службы для своего личного идентификатора google apps. – tinus91

0

Сомневаюсь, что вы получаете токен доступа при использовании учетной записи службы. Если вы использовали OAuth2 танец и запрашивая пользователя для разрешений, то да может получить маркер доступа, и т.д .. Это правильный путь для инициализации экземпляра API Calendar от объекта Google Credential:

import com.google.api.services.calendar.Calendar; 
Calendar service = new Calendar.Builder(httpTransport, jsonFactory, null) 
    .setHttpRequestInitializer(credential).build(); 

Вы можете затем используйте экземпляр Calendar для вызова API. Более подробную информацию можно найти здесь: https://developers.google.com/admin-sdk/directory/v1/guides/delegation https://developers.google.com/google-apps/calendar/quickstart/java

Смежные вопросы