java - How do I use OAuth 2.0 to access Google Calendar (Service Model)? -


i'm trying groovy/grails application speak google calendar api java, using service model. i'll happy simple calendar list. no matter though, end with:

uri: /test class: com.google.api.client.auth.oauth2.tokenresponseexception message: 400 bad request { "error" : "invalid_grant" } 

the same user "googleaccounts@quirk.biz" owns both calendar , api console app. code follows:

package quirkplanner  import com.google.api.client.googleapis.auth.oauth2.googlecredential; import com.google.api.client.googleapis.javanet.googlenethttptransport import com.google.api.client.http.httptransport import com.google.api.client.json.jsonfactory import com.google.api.client.json.jackson2.jacksonfactory; import com.google.api.services.calendar.calendar import com.google.api.services.calendar.model.*;  class testcontroller {      def servletcontext      private static final httptransport http_transport = googlenethttptransport.newtrustedtransport();     private static final jsonfactory json_factory = new jacksonfactory();      private static final string service_email = "12345678901234-abcdefabcdef@developer.gserviceaccount.com";     private static final string client_id = "12345678901234.apps.googleusercontent.com";     private static final string path_to_certificate = "/web-inf/abcdefabcdef-privatekey.p12";     private static final string service_account_user="my-google-admin-user@quirk.biz";      def index() {          googlecredential credential = new googlecredential.builder().settransport(http_transport)             .setjsonfactory(json_factory)             .setserviceaccountid(service_email)             .setserviceaccountscopes(collections.singleton("https://www.googleapis.com/auth/calendar"))             .setserviceaccountprivatekeyfromp12file(new file(servletcontext.getrealpath(path_to_certificate)))             .setserviceaccountuser(service_account_user)             .build();          calendar service3 = new calendar(http_transport, json_factory, credential);         com.google.api.services.calendar.model.calendar calendar = service3.calendars().get("primary").execute();          render("ok")     } } 

buildconfig.groovy dependencies are:

    compile 'com.google.api-client:google-api-client:1.18.0-rc'     compile 'com.google.http-client:google-http-client-jackson2:1.18.0-rc' 

and have list of jar's i'm using. list not complete, hence buildconfig dependencies. ideally, should choose 1 or other...

image of grails lib folder

any appreciated...

there few things try:

  1. drop , re-create private keys in google console.
  2. share 1 of calendars within google calendar of service account owner (googleaccounts@quirk.biz) service_email address.
  3. do not try impersonate account. remove setserviceaccountuser(service_account_user)

be sure use service_email

.setserviceaccountid(service_email) 

as have correctly done. google's documentation not clear on using service account id not work.

good luck!


Comments

Popular posts from this blog

Change the color of an oval at click in Java AWT -

I am trying to solve the error message 'incompatible ranks 0 and 1 in assignment' in a fortran 95 program. -

c# - MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets(3243,9): error MSB4094 -