Google service account can't impersonate GSuite user

后端 未结 1 852
醉梦人生
醉梦人生 2020-12-20 03:31
from google.oauth2 import service_account
import googleapiclient.discovery

SCOPES = [\'https://www.googleapis.com/auth/calendar\']
SERVICE_ACCOUNT_FILE = \'GOOGLE_S         


        
相关标签:
1条回答
  • 2020-12-20 04:10

    I think you're problem is that your not authorising your credentials before making the call to the Calendar API but there is a couple of differences that you have that I use in my own implementation

    • Use the following import statements

      from oauth2client.service_account import ServiceAccountCredentials
      from apiclient import discovery
      
    • Use the from_json_keyfile_name method

    • Authorise the credentials and pass it as a http argument when building the service

    Try this modification to your code:

    from apiclient import discovery
    from oauth2client.service_account import ServiceAccountCredentials
    import httplib2
    
    SCOPES = ['https://www.googleapis.com/auth/calendar']
    SERVICE_ACCOUNT_FILE = 'GOOGLE_SECRET.json'
    
    credentials = ServiceAccountCredentials.from_json_keyfile_name(
            SERVICE_ACCOUNT_FILE, scopes=SCOPES)
    
    # Use the create_delegated() method and authorize the delegated credentials
    delegated_credentials = credentials.create_delegated('address@example.com')  
    delegated_http = delegated_credentials.authorize(httplib2.Http())
    google_calendar = discovery.build('calendar', 'v3', http=delegated_http)
    
    events = google_calendar.events().list(
        calendarId='address@example.com',
        maxResults=10
    ).execute()
    

    I would also suggest setting calendarId='primary' in your API call so that you always return the primary calendar of the user who you currently have delegated credentials for.

    For more information on authenticating using ServiceAccountCredentials see the following link: http://oauth2client.readthedocs.io/en/latest/source/oauth2client.service_account.html

    0 讨论(0)
提交回复
热议问题