Google spreadsheet api Request had insufficient authentication scopes

96,478

Solution 1

  1. Firstly delete the credentials files ~/.credentials/sheets.googleapis.com-nodejs-quickstart.json (depending on your setting)

  2. Change the scope variable used for reading cells from Google Spreadsheets from

var SCOPES = ['https://www.googleapis.com/auth/spreadsheets.readonly'];

to

var SCOPES = ['https://www.googleapis.com/auth/spreadsheets'];

  1. After the execution of code, API will authenticate again and then the issue will be resolved.

Solution 2

The scopes look good, maybe you should try to remove the credentials stored previously in /Users/yourUserName/.credentials/sheets.googleapis.com-projectName/*, and then execute the application again to get new credentials.

Solution 3

First, make sure you also enable the Sheets API in your Developers Console.

The insufficient authentication scopes is an error in the OAuth 2.0 token provided in the request specifies scopes that are insufficient for accessing the requested data.

So make sure you use the correct and all necessary scope and check this Authorizing requests with OAuth 2.0 if you properly follow the steps here.

Lastly, try to revoke the access and try to redo it.

For more information, check this related SO question:

Solution 4

In my case a token.pickle file was created in the same working directory as my program, I also had my credentials.json file in the same directory, all I did was deleted the token.pickle file , then changed the scope, then ran it again, it will again ask for authentication in your browser and that's it , it works.

My code snippet is like below , I was creating a pickle file so I had to delete it before changing scope

    if os.path.exists('token.pickle'):
    with open('token.pickle', 'rb') as token:
        creds = pickle.load(token)
    # If there are no (valid) credentials available, let the user log in.
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file(
                'credentials.json', SCOPES)
            creds = flow.run_local_server()
        # Save the credentials for the next run
        with open('token.pickle', 'wb') as token:
            pickle.dump(creds, token)

Solution 5

Delete the token from tokens folder and try again. If you have tried to run the Google Drive Quickstart before running the Spreadsheet Quickstart, the existing token might not have the spreadsheet access updated.

Share:
96,478
jtomasrl
Author by

jtomasrl

Updated on September 02, 2021

Comments

  • jtomasrl
    jtomasrl over 2 years

    I'm making an script to read data from google spreadsheet using the following script on nodejs:

    var url = oauth2Client.generateAuthUrl({
        access_type:     'offline',
        approval_prompt: 'force',
        scope: [
          'https://www.googleapis.com/auth/analytics.readonly',
          'https://www.googleapis.com/auth/drive',
          'https://www.googleapis.com/auth/spreadsheets'
        ]
    });
    global.googleapis = { expiry_date: 0 };
    google.options({ auth: oauth2Client });
    var sheets    = google.sheets('v4');
    sheets.spreadsheets.get({ spreadsheetId: 'id'}, function(err, data) {
        res.send(err, data);
    });
    

    But on every get request i'm getting this error:

    Request had insufficient authentication scopes.
    

    I checked the Google developers console to enable the Google Drive API and it's enabled, so I dont really know what could it be.

  • Slobodan Ilic
    Slobodan Ilic about 6 years
    This answers the question in the most straightforward fashion (and explains why the error occurs in the first place)!
  • J-ho
    J-ho over 5 years
    You don't have to delete the credentials.json, only remove token.js and change scope in nodejs project. Then you need to do that link authentication again.
  • Damon
    Damon over 5 years
    Deleting the json file does nothing. I had to delete the token.json directory NOT the json credential file. Now it actually works.
  • The Nate
    The Nate over 5 years
    This relieved a massive and growing headache. Thanks, Long and J-Ho!
  • aNewb
    aNewb about 3 years
    there is no credentials file on my drive - my code is executing on the Google server because it is written in Google Apps Script - the advanced Classroom API is on. No spreadsheet involved although script is bound to spreadsheet. This information is meaningless to me.
  • Long Nguyen
    Long Nguyen about 3 years
    @aNewb You are welcome to contribute the answer for the case executed on the Google server. Thanks.
  • Hamza Anis
    Hamza Anis over 2 years
    Please add further details to expand on your answer, such as working code or documentation citations.