为啥 Google Calendar API (oauth2) 以“权限不足”响应?

Posted

技术标签:

【中文标题】为啥 Google Calendar API (oauth2) 以“权限不足”响应?【英文标题】:Why is Google Calendar API (oauth2) responding with 'Insufficient Permission'?为什么 Google Calendar API (oauth2) 以“权限不足”响应? 【发布时间】:2013-06-02 23:34:45 【问题描述】:

我正在向以下 URL 发出 get 请求(将 id 替换为网络界面中的 id):

https://www.googleapis.com/calendar/v3/calendars/id

一些断言:

    使用有效的访问令牌正确设置了 Authorize 标头(该令牌适用于 Analytics API)

    我为 oauth2 设置了以下范围,它可以正确显示:

    https://www.googleapis.com/auth/calendar
    

    令牌似乎没有过期;它适用于 Analytics API。

     "error":  "errors": [  "domain": "global", "reason": "insufficientPermissions", "message": "Insufficient Permission"  ], "code": 403, "message": "Insufficient Permission"  
    

【问题讨论】:

【参考方案1】:

为了解决这个问题,我在 https://accounts.google.com/IssuedAuthSubTokens 撤销了对应用程序的访问权限,然后重试,我能够正确访问 API。

尽管列表中有范围,并且范围显示在 Google 的 OAuth2 授权页面上,但未授予额外的范围。

【讨论】:

嗨 rob :) 我撤销了访问权限 :) 而且,我很好奇如何批准它? :) 抱歉,谢谢 :) 将近两年后,当您排除配置错误时,这就是有效的方法! @whitesiroi 大概你已经弄清楚了,但是为了后代: 您在应用程序授权页面上照常重新授权。在使用 Rails、Devise (_for :users) 和 google_oauth2 进行开发时,这是您的 user_omniauth_authorize_path 我点击了你的链接,在我已经授权的游戏上点击了删除。现在我无法从我的游戏中获取授权码。我得到“AuthApiAccessForbidden”请帮忙。 @HamzehSoboh Men 我做了完全相同的事情,现在我被卡住了,如何重新授权访问,我需要帮助【参考方案2】:

我会仔细检查包含的范围 - 当我请求错误的范围时,我已经看到了确切的消息。访问https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=xxxxxx 是一个很好的验证方式。

假设签出,请确保您拥有访问令牌的用户有权查看您尝试访问的日历。 “齿轮”图标->“设置”->“日历”->(选择日历)->“共享此日历”

【讨论】:

非常感谢,我发现了使用 tokeninfo 调用的问题。 是的,这很有帮助!谢谢! 我正在尝试制作一个使用 youtube api 将频道所有者视频下载到他们的机器的应用程序。甚至不确定是否有可能获取视频文件?【参考方案3】:

添加日历visit calendar api 的范围并检查访问配置

https://www.googleapis.com/auth/calendar
https://www.googleapis.com/auth/calendar.readonly

【讨论】:

只能选1个?【参考方案4】:

为了获得足够的权限来访问日历,我必须包含 Google Plus 范围:

所以我的scope 最终看起来像这样:

'https://www.googleapis.com/auth/calendar', 'https://www.googleapis.com/auth/calendar.readonly', 'https://www.googleapis.com/auth/plus.login'

【讨论】:

plus.login 的范围有点宽泛——它还抓取年龄范围并警告用户,如果你添加这个,登录仍然有效:https://www.googleapis.com/auth/userinfo.profile【参考方案5】:

当我在 QuickStart 中执行示例时,我可以从我的日历中获取事件列表。 但我使用的是 SCOPE='https://www.googleapis.com/auth/calendar.readonly'。 当我执行代码时,会生成一个链接,我必须在其中创建一个密钥以获得列出日历中事件的权限。 所以,当我尝试插入一个事件时,我遇到了这个错误 INSUFICIENT PERMISSION。 解决这个问题: 1) 我将 SCOPE 更改为 https://www.googleapis.com/auth/calendar 2)删除文件token.json 3)再次执行代码,我必须创建一个新的权限密钥,现在有了插入新事件的权限。

【讨论】:

【参考方案6】:

我不得不删除对我的应用程序的权限,然后返回以在https://security.google.com/settings/security/permissions 中授予权限

【讨论】:

【参考方案7】:

我在添加或编辑事件时也面临同样的问题。经过一番谷歌搜索,我发现,一个范围会给你所有权限 -

https://www.googleapis.com/auth/calendar

【讨论】:

【参考方案8】:

我在尝试在我的 Google 日历中添加活动时遇到了同样的问题。 我最终是如何解决这个问题的:

删除我的文件“credentials.json” 启动一个 Python 程序,该程序看起来像 Google 的快速入门程序,用“SCOPES = 'https://www.googleapis.com/auth/calendar'”编写。这个程序是唯一对我有用的解决方案。启动我的 django 命令来调用我的实际工作对我不起作用。但这解决了我的权限问题。

然后,它会打开您的浏览器,Google 会询问您是否允许管理您的日历并在您的目录中创建一个新的“credentials.json”。

【讨论】:

以上是关于为啥 Google Calendar API (oauth2) 以“权限不足”响应?的主要内容,如果未能解决你的问题,请参考以下文章

Google 日历 API 范围 - calendar.readonly 和 calendar.events.readonly 之间有啥区别?

Google Calendar API 批量请求 PHP

ruby Google Calendar API - 事件删除

ruby Google Calendar API - 活动列表

从google-calendar-API获取详细信息,无需帐户关联

python Google Calendar API Python快速入门