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...
any appreciated...
there few things try:
- drop , re-create private keys in google console.
- share 1 of calendars within google calendar of service account owner (googleaccounts@quirk.biz) service_email address.
- 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
Post a Comment