Google Tasks service object for a User who is already authenticated with oAuth2 (Grails/Java)

104 Views Asked by At

I am trying to get a Google Tasks service object which has authorised Credentials in order that we can pull Tasks for a user who has already registered and logged-in (oAuth2) with our Web Application via Google Apps Marketplace.

Unfortunately I am receiving a 401 - Authorization - Login Required. Can anyone tell me where I am going wrong?

Here is the code for my getTasksService() method:

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

def clientId = GOOGLE_CLIENT_ID
def clientSecret = GOOGLE_SECRET
def applicationName = APPLICATION_NAME

def tokenResponse = (TokenResponse) googleAppsNewOAuthService.getGoogleResponse()
def credential = new GoogleCredential.Builder()
                                     .setJsonFactory(jsonFactory)
                                     .setTransport(httpTransport)
                                     .setClientSecrets(clientId, clientSecret)
                                     .build()
                                     .setFromTokenResponse(tokenResponse)

def service = new com.google.api.services.tasks.Tasks.Builder(httpTransport, jsonFactory, credential)
                                                     .setApplicationName(applicationName)
                                                     .build()
return service

The code for the googleAppsNewOAuthService.getGoogleResponse() method:

public JSONElement getGoogleResponse() {
    def session = RequestContextHolder.currentRequestAttributes().getSession()
    Token googleAccessToken = (Token) session[oauthService.findSessionKeyForAccessToken('google')]

    log.info "Google Access Token: ${googleAccessToken.token}"

    if(googleAccessToken == null) {
        return null
    }

    def googleResource = oauthService.getGoogleResource(googleAccessToken, "https://www.googleapis.com/oauth2/v1/userinfo" )
    def googleResponse = JSON.parse(googleResource?.getBody())

    return googleResponse
}

... and the resulting GoogleJsonResponseException:

{
  "code" : 401,
  "errors" : [ {
    "domain" : "global",
    "location" : "Authorization",
    "locationType" : "header",
    "message" : "Login Required",
    "reason" : "required"
  } ],
  "message" : "Login Required"
}

at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:145)
0

There are 0 best solutions below