Google 日历:"Request had insufficient authentication scopes." 移动到 calendar.readonly

Google Calendar: "Request had insufficient authentication scopes." when moving to calendar.readonly

最初,我有以下范围:

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

使用代码:

credentials = google.oauth2.credentials.Credentials(
    **flask.session['credentials'])
service = build('calendar', 'v3', credentials=credentials)
events_result =service.calendarList().list().execute()
events = events_result.get('items', [])

效果很好。但是,因为我不需要访问 write/delete 用户日历 & 以防止用户获取

See, edit, share and permanently delete all the calendars that you can access using Google Calendar

&为了保护他们的安全,我将范围缩小到

SCOPES = ['https://www.googleapis.com/auth/calendar.events.readonly']

使用相同的代码。但是,现在我得到:

googleapiclient.errors.HttpError: <HttpError 403 when requesting https://www.googleapis.com/calendar/v3/users/me/calendarList?alt=json returned "Request had insufficient authentication scopes.". Details: "Request had insufficient authentication scopes.">

尽管 doc 提到您可以执行此类代码来检索具有两个范围的事件。

修改点:

  • 当我看到您的脚本和范围时,您正在尝试从范围为 https://www.googleapis.com/auth/calendar.events.readonlyevents_result =service.calendarList().list().execute() 检索日历列表。我认为这可能是您遇到问题的原因。

修改后的脚本:

当您想使用当前脚本检索日历列表时,请将范围修改为https://www.googleapis.com/auth/calendar.readonly

当您要检索事件列表时,请按如下方式修改您的脚本。在这种情况下,可以使用https://www.googleapis.com/auth/calendar.events.readonly的范围。

service = build('calendar', 'v3', credentials=creds)
events_result = service.events().list(calendarId='primary').execute()
events = events_result.get('items', [])
  • 请根据您的情况修改日历 ID。

参考文献: