1

Я пытаюсь получить и обновить пользователей своего домена с помощью API администратора Google.API-интерфейс API доступа Google Admin SDK с использованием Java

private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance(); 
    private static final List<String> SCOPES = Arrays.asList(
     "https://www.googleapis.com/auth/admin.directory.user", 
     "https://www.googleapis.com/auth/admin.directory.user.readonly"); 

    public static void main(String[] args) { 
    try { 
     HttpTransport httpTransport = new NetHttpTransport(); 


     GoogleCredential credential = 
      new GoogleCredential.Builder() 
       .setTransport(httpTransport) 
       .setJsonFactory(JSON_FACTORY) 
       .setServiceAccountId(
        "[email protected]") 
       .setServiceAccountUser("[email protected]") 
       .setServiceAccountScopes(SCOPES) 
       .setServiceAccountPrivateKeyFromP12File(
        new File("C:\\privatekey.p12")).build(); 

     Directory admin = 
      new Directory.Builder(httpTransport, JSON_FACTORY, credential) 
       .setApplicationName("User Sync Service") 
       .setHttpRequestInitializer(credential).build(); 

     Directory.Users.List list = admin.users().list(); 
     Users users = list.execute(); 
     System.out.println("************"); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    } 

С моей консоли Google

enter image description here enter image description here

  1. API Access включена с моей панели безопасности
  2. ServiceAccountUser является Суперадминистратор.

Но я все еще получаю эту ошибку

com.google.api.client.auth.oauth2.TokenResponseException: 400 Bad Request 
{ 
    "error" : "access_denied" 
} 
    at com.google.api.client.auth.oauth2.TokenResponseException.from(TokenResponseException.java:105) 
    at com.google.api.client.auth.oauth2.TokenRequest.executeUnparsed(TokenRequest.java:287) 
    at com.google.api.client.auth.oauth2.TokenRequest.execute(TokenRequest.java:307) 
    at com.google.api.client.googleapis.auth.oauth2.GoogleCredential.executeRefreshToken(GoogleCredential.java:269) 
    at com.google.api.client.auth.oauth2.Credential.refreshToken(Credential.java:489) 
    at com.google.api.client.auth.oauth2.Credential.intercept(Credential.java:217) 
    at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:858) 
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:410) 
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:343) 
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:460) 

Обновление: Скриншот из ManageOath

enter image description here

+0

Вы смогли получить решение этой проблемы? Я вроде как в той же ситуации – user1076371

+0

@ user1076371, да. Я могу помочь вам в этом, так как Google Doc довольно вводит в заблуждение – Reddy

+0

Можете ли вы опубликовать, как вы исправили проблему? Благодаря! – user1076371

ответ

3

Похоже, что документация несколько неоднозначна о клиенте и домене. Один или другой должен быть указан. Вы можете установить атрибут customer при использовании функции list(). Он должен быть настроен на идентификатор клиента (уникальная строка в случайном порядке) или, если вы уже являетесь администратором уже в экземпляре Google Apps, вы можете просто указать точно customer=my_customer. Кроме того, вы можете указать domain=example.com, где example.com является основным или дополнительным доменом в экземпляре Google Apps. При определении домена в результатах будут возвращаться только пользователи, у которых есть первичный (домашний) адрес в этом домене. При указании клиента все пользователи экземпляра Google Apps будут возвращены.

Вы можете подтвердить это, используя Google API Explorer. Уход клиента с пустым всегда приводит к ошибке. Тем не менее, установка my_customer для атрибута клиента должна исправить это.

+0

Тем не менее, я получаю такую ​​же ошибку. Пробовал с setDomain и setCustomer. – Reddy

+0

Google API Explorer также бросает ошибку, даже если я заполняю Клиент и домен или отдельно обе детали. – Reddy

+0

отредактировал мой ответ, чтобы добавить некоторые пояснения. –

0

Переходим к https://admin.google.com/имя_домена/ManageOauthClients и убедитесь, что эти прицелов добавляются для y наш идентификатор учетной записи службы xxxxxxxxxxxxxxxxxx.apps.googleusercontent.com.

+0

Это уже есть. и я обновил исходное сообщение с помощью скриншота тоже – Reddy

+0

Что произойдет, если вы просто запустите setApplicationName («Служба синхронизации пользователя») и setHttpRequestInitializer (учетные данные)? – AMS

+0

такой же ошибка. Плохой запрос. Доступ запрещен – Reddy

1

Вы должны указать либо домен или параметр клиента:

Directory.Users.List list = admin.users().list() 
    .setDomain("<target_domain>"); 

// or 

Directory.Users.List list = admin.users().list() 
    .setCustomer("<target_customer_id>"); 

Я подал ошибку, чтобы обновить документы, чтобы понять, что по крайней мере один из этих двух параметров не требуется.

+0

Все еще я получаю такую ​​же ошибку. Пробовал с setDomain и setCustomer. – Reddy

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