Я пытаюсь использовать 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
Да. Я добавил идентификатор клиента, который имеет форму xxxxx.apps.googleusercontent.com. Я добавил к нему следующие области. https://www.googleapis.com/auth/admin.directory.user https://www.googleapis.com/auth/admin.directory.user.readonly – user1076371
Вы создали учетную запись службы в консоли API, используя свой супер учетная запись администратора? Я думаю, что учетная запись службы унаследовала права супер администратора, если проект создан с использованием учетной записи супер администратора. – Emily
О, это так? Учетная запись службы была создана с использованием другого домена. Приложение, над которым я работаю, - это многопользовательское приложение, которое должно работать с несколькими доменами, не связанными друг с другом. В этом случае я не смогу создать несколько учетных записей службы для каждого домена, который я продаю. Я думал, что это работает, когда кто-то захочет использовать это приложение, суперадмин этого домена отправится и добавит учетную запись службы, которую мы даем на третьей стороне, на странице доступа к их домену. – user1076371