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

PHPMotion implementation - URL based videos (Hosted on separate location) -

javascript - Using Windows Media Player as video fallback for video tag -

c# - Unity IoC Lifetime per HttpRequest for UserStore -