0

Я пытаюсь использовать SDK администратора, используя java-клиент. Мое требование заключается в том, чтобы приложение на стороне сервера управляло пользователями без явного согласия конечного пользователя. Я выполнил следующие шаги.Google Admin SDK вызывает плохой запрос java-клиент

У меня есть учетная запись службы, это консоль Google API. Добавлена ​​служебная учетная запись третьей стороне в разделе доступа к консоли администратора Google Apps. Добавлены области для пользователя, user.readonly для одного и того же. Создано суперадминистратора для использования в качестве пользователя учетной записи службы Я использую клиент Java следующим образом: То же действие, работает в API проводника с помощью электронной почты службы для проверки подлинности

 HttpTransport HTTP_TRANSPORT = new NetHttpTransport(); 
     JsonFactory JSON_FACTORY = new JacksonFactory(); 
     GoogleCredential credential=null; 
     try { 

      credential = new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT) 
        .setJsonFactory(JSON_FACTORY) 
        .setServiceAccountId("[email protected]") 
        .setServiceAccountScopes(DirectoryScopes.all()) 
        .setServiceAccountPrivateKeyFromP12File(new File("/Users/xxx/Downloads/file-privatekey.p12")) 
        .setServiceAccountUser("[email protected]") //Super admin account 
        .build(); 
     } catch (GeneralSecurityException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     Directory directory = new Directory.Builder(HTTP_TRANSPORT,JSON_FACTORY,credential).setApplicationName("Sync Service").build(); 

     try { 
      Directory.Users.List list = directory.users().list(); 
      list.setDomain("subdomain.domain.com"); 
      //list.setCustomer("xxx"); 
      Users users = list.execute(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

Я получаю следующая ошибка. Не знаю, почему!

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) 
    at GappsClient.main(GappsClient.java:53) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) 

Process finished with exit code 0 

ответ

1

Вы добавили идентификатор клиента своей учетной записи службы для управления сторонним доступом OAuth Access на своем Cpanel?

+0

Да. Я добавил идентификатор клиента, который имеет форму xxxxx.apps.googleusercontent.com. Я добавил к нему следующие области. https://www.googleapis.com/auth/admin.directory.user https://www.googleapis.com/auth/admin.directory.user.readonly – user1076371

+0

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

+0

О, это так? Учетная запись службы была создана с использованием другого домена. Приложение, над которым я работаю, - это многопользовательское приложение, которое должно работать с несколькими доменами, не связанными друг с другом. В этом случае я не смогу создать несколько учетных записей службы для каждого домена, который я продаю. Я думал, что это работает, когда кто-то захочет использовать это приложение, суперадмин этого домена отправится и добавит учетную запись службы, которую мы даем на третьей стороне, на странице доступа к их домену. – user1076371

0

Я последовал за @Emily Lam и сформировал учетную запись службы, используя старую консоль Google API, и я смог получить ожидаемый результат. Пожалуйста, дайте мне знать, если кто-то нуждается в подробных шагах, которые я выполнил. Следуйте идентификаторам клиентов OAuth 2.0 ниже по ссылке https://developers.google.com/console/help/#creatingdeletingprojects

+0

Не могли бы вы предоставить подробные шаги? Я столкнулся с той же проблемой и до сих пор не смог найти решение ... – Sardonic

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