google-sheets-apigoogle-oauthscopes

Google Sheet API access with Application Default credentials


I am trying to access Google Sheet (read only mode) from Python (runs in GKE).

I am able to get application default creds, but getting scopes issue (as I am missing https://www.googleapis.com/auth/spreadsheets.readonly scope). See code below:

from googleapiclient.discovery import build
from oauth2client import client

creds=client.GoogleCredentials.get_application_default()
service = build('sheets', 'v4', credentials=creds)
sheet = service.spreadsheets()
sheet.values().get(spreadsheetId='XXXXXXXXXX', range='Sheet1!A:C').execute()

The output is:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.5/dist-packages/oauth2client/_helpers.py", line 133, in positional_wrapper
    return wrapped(*args, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/googleapiclient/http.py", line 840, in execute
    raise HttpError(resp, content, uri=self.uri)
googleapiclient.errors.HttpError: <HttpError 403 when requesting https://sheets.googleapis.com/v4/spreadsheets/XXXXXX/values/Sheet1%21A%3AC?alt=json returned "Request had insufficient authentication scopes.">

I tried to read any documentation available, but al of the relevant scope related is using external service account JSON file.

Is there a way to use Application Default and add the required scope?


Solution

  • Answer:

    You need to define your scopes in the create_scoped() method of GoogleCredentials.get_application_default().

    Code snippet:

    creds = GoogleCredentials.get_application_default().create_scoped(
              ['https://www.googleapis.com/auth/spreadsheets.readonly'])
    

    References: