2013-05-24 3 views
4

Я экспериментирую с клиентом Java для SDK Google Admin, в частности API-интерфейса Directory. Он основан на использовании GoogleCredentials, как API Google Диска. Однако, в отличие от Google Диска, я получаю 400 ошибок с ошибкой в ​​Directory. Я настраиваю API следующим образом:API-интерфейс API администратора Google возвращает 400 плохих запросов

Directory directory = new Directory.Builder(TRANSPORT, FACTORY, credential).build(); 
Directory.Users.List list = directory.users().list(); 
Users users = list.execute(); 

Последний кадр() создает следы ошибок и стека, перечисленные в нижней части сообщения. Я использую следующие области, чтобы авторизовать себя. Я также использую Drive API, как вы можете видеть.

https://www.googleapis.com/auth/userinfo.profile 
https://www.googleapis.com/auth/userinfo.email 
https://www.googleapis.com/auth/drive 
https://www.googleapis.com/auth/admin.directory.user 

Доступ к API-интерфейсу Drive работает как шарм. Я могу запросить файлы без проблем. Однако, если я выполняю простую операцию в API каталогов, я получаю следы ошибок и стека, перечисленные ниже. Следует упомянуть, что API API Диска и Каталога относятся к тому же домену Google Apps, для которого я являюсь администратором. Я также включил оба API в консоли Google API. В остальном я не могу понять, что я делаю неправильно, и мне интересно, видел ли кто-нибудь что-то подобное или иным образом имеет опыт доступа к этому API через клиент Java.

Спасибо,

Ральф

[ERROR] com.google.api.client.googleapis.json.GoogleJsonResponseException: 400 OK 
[ERROR] { 
[ERROR] "code" : 400, 
[ERROR] "errors" : [ { 
[ERROR]  "domain" : "global", 
[ERROR]  "message" : "Bad Request", 
[ERROR]  "reason" : "badRequest" 
[ERROR] } ], 
[ERROR] "message" : "Bad Request" 
[ERROR] } 
[ERROR]  at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:145) 
[ERROR]  at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:111) 
[ERROR]  at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:38) 
[ERROR]  at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:312) 
[ERROR]  at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1042) 
[ERROR]  at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:410) 
[ERROR]  at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:343) 
[ERROR]  at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:460) 
[ERROR]  at com.arcus.example.server.api.DirectoryAPI.getEmails(DirectoryAPI.java:29) 
[ERROR]  at com.arcus.example.server.action.CreateExampleDelegate.execute(CreateExampleDelegate.java:29) 
[ERROR]  at com.arcus.example.server.action.CreateExampleActionHandler.execute(CreateExampleActionHandler.java:28) 
[ERROR]  at com.arcus.example.server.action.CreateExampleActionHandler.execute(CreateExampleActionHandler.java:13) 
[ERROR]  at com.gwtplatform.dispatch.server.AbstractDispatchImpl.doExecute(AbstractDispatchImpl.java:156) 
[ERROR]  at com.gwtplatform.dispatch.server.AbstractDispatchImpl.execute(AbstractDispatchImpl.java:112) 
[ERROR]  at com.gwtplatform.dispatch.server.AbstractDispatchServiceImpl.execute(AbstractDispatchServiceImpl.java:84) 
[ERROR]  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
[ERROR]  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
[ERROR]  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
[ERROR]  at java.lang.reflect.Method.invoke(Method.java:601) 
[ERROR]  at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:561) 
[ERROR]  at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208) 
[ERROR]  at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248) 
[ERROR]  at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62) 
[ERROR]  at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 
[ERROR]  at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
[ERROR]  at com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.java:263) 
[ERROR]  at com.google.inject.servlet.ServletDefinition.service(ServletDefinition.java:178) 
[ERROR]  at com.google.inject.servlet.ManagedServletPipeline.service(ManagedServletPipeline.java:91) 
[ERROR]  at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:62) 
[ERROR]  at com.gwtplatform.dispatch.server.AbstractHttpSessionSecurityCookieFilter.doFilter(AbstractHttpSessionSecurityCookieFilter.java:69) 
[ERROR]  at com.google.inject.servlet.FilterDefinition.doFilter(FilterDefinition.java:163) 
[ERROR]  at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:58) 
[ERROR]  at com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:118) 
[ERROR]  at com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:113) 
[ERROR]  at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
[ERROR]  at com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74) 
[ERROR]  at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
[ERROR]  at com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:123) 
[ERROR]  at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
[ERROR]  at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34) 
[ERROR]  at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
[ERROR]  at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63) 
[ERROR]  at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
[ERROR]  at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43) 
[ERROR]  at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
[ERROR]  at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125) 
[ERROR]  at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
[ERROR]  at com.google.appengine.tools.development.DevAppServerServersFilter.doDirectRequest(DevAppServerServersFilter.java:369) 
[ERROR]  at com.google.appengine.tools.development.DevAppServerServersFilter.doDirectServerRequest(DevAppServerServersFilter.java:352) 
[ERROR]  at com.google.appengine.tools.development.DevAppServerServersFilter.doFilter(DevAppServerServersFilter.java:115) 
[ERROR]  at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
[ERROR]  at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) 
[ERROR]  at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
[ERROR]  at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 
[ERROR]  at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) 
[ERROR]  at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) 
[ERROR]  at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:97) 
[ERROR]  at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
[ERROR]  at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:438) 
[ERROR]  at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
[ERROR]  at org.mortbay.jetty.Server.handle(Server.java:326) 
[ERROR]  at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) 
[ERROR]  at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:938) 
[ERROR]  at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755) 
[ERROR]  at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218) 
[ERROR]  at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 
[ERROR]  at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) 
[ERROR]  at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) 

ответ

6

Проблема заключается в том, что вы не указываете пользователю использовать или домен для использования,

вам нужно добавить эту информацию здесь:

Directory directory = new Directory.Builder(TRANSPORT, FACTORY, credential).build(); 
Directory.Users.List list = directory.users().list(); 
list.setCustomer("[email protected]"); 
Users users = list.execute(); 

Теперь, если у вас есть проблема с разрешением, код возврата ошибки будет 403 = проблема авторизации.

+0

Привет, Сабрина, спасибо за ваш ответ! Я пропустил это, потому что по какой-то причине я не включил уведомления по электронной почте ... У меня сейчас работает! – Rlp

1

Если вы используете Maven, просто добавьте следующие строки в pom.xml:

<dependency> 
    <groupId>com.google.apis</groupId> 
    <artifactId>google-api-services-admin</artifactId> 
    <version>directory_v1-rev4-1.15.0-rc</version> 
</dependency> 
5

Решение является:

HttpTransport httpTransport = new NetHttpTransport(); 
    JacksonFactory jsonFactory = new JacksonFactory(); 

    GoogleCredential credential; 

    Collection<String> SCOPES = new ArrayList<String>(); 
    SCOPES.add("https://www.googleapis.com/auth/admin.directory.user"); 



    credential = new GoogleCredential.Builder().setTransport(httpTransport) 
      .setJsonFactory(jsonFactory) 
      .setServiceAccountId(SERVICE_ACCOUNT_EMAIL) 
      .setServiceAccountUser("[email protected]") 
      .setServiceAccountScopes(SCOPES) 
      .setServiceAccountPrivateKeyFromP12File(
      new java.io.File(SERVICE_ACCOUNT_PKCS12_FILE_PATH)) 
      .build(); 

    Directory directory = new Directory.Builder(httpTransport, jsonFactory, credential).build(); 

    Directory.Users.List list = directory.users().list(); 
    list.setDomain("yourDomain.com"); 
    Users users = list.execute(); 

SERVICE_ACCOUNT_PKCS12_FILE_PATH = расположение файла ключа (API Console) SERVICE_ACCOUNT_EMAIL = Учетная запись службы из API-сокеты

Добавьте область действия с панели управления вашего домена, используя метод Service Account https://developers.google.com/drive/delegation

И активируйте Admin SDK в консоли API.

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