当前位置: 首页 > 知识库问答 >
问题:

Google Calendar API在OAuth期间出现403错误,尽管它似乎授予访问权限

解阳荣
2023-03-14

我的应用程序将发布、编辑和删除用户谷歌日历上的事件。我正在配置OAuth以实现这一点。其想法是,注册后,用户将能够进入他们的设置,并同意将我的应用程序连接到他们的谷歌日历。然后,我将能够在数据库中存储oauth令牌和刷新令牌,并在创建/编辑/删除用户日历上的事件时使用它们。

无论如何,问题是我选择我的帐户:

然后我通过单击“允许”提供同意:

这就是它变得奇怪的地方:在幕后,谷歌日历API报告了一个403禁止的错误。

%Ueberauth.Failure{errors: [%Ueberauth.Failure.Error{message: 403,
message_key: "OAuth2"}], provider: :google,
strategy: Ueberauth.Strategy.Google}

我的UEBERATH配置:

config :ueberauth, Ueberauth,
  providers: [
    google: {Ueberauth.Strategy.Google, [default_scope: "https://www.googleapis.com/auth/calendar", approval_prompt: "force", access_type: "offline"]}
]

我提出的请求:

def callback(%{assigns: %{ueberauth_failure: fail}} = conn, _params) do
  IO.inspect fail
  conn
  |> put_flash(:error, "Failed to authenticate.")
  |> redirect(to: "/")
end

def callback(%{assigns: %{ueberauth_auth: auth}} = conn, _params) do
  IO.inspect auth
  conn
  |> put_flash(:success, "Connected to Google.")
  |> redirect(to: "/")
end

第一个回调函数是匹配的函数(因为它失败了)。

但是,当我转到我的Google帐户时,我可以看到该应用程序已被授予权限:

我正在提供正确的client\u id和client\u secret。此外,我在Google API控制台中创建了一个服务帐户,并与该帐户共享了我的日历:

我还需要做什么?

编辑:更多信息——我可以通过我的代码(这是样板Ueberauth_Google)授予对所有其他谷歌模块的访问权限。例如,如果我以电子邮件为范围提出请求,它会起作用,我会从谷歌获得auth_token。只有谷歌日历给出了403,这让我相信是有一些特定的东西导致了它。

编辑2:我查看了Google Calendar API的错误处理部分,其中列出的403个错误都不适用于我:

  • 403:超出每日限额

编辑3:我创建了一个全新的谷歌账户,并将其日历与我的谷歌服务账户共享。但那一个给出了相同的错误。

共有1个答案

羊舌高明
2023-03-14

终于弄明白了。

<代码>https://www.googleapis.com/auth/calendar范围本身是不够的。还需要添加<代码>https://www.googleapis.com/auth/userinfo.profile到范围。

 类似资料:
  • 本文向大家介绍oauth 授权码授予,包括了oauth 授权码授予的使用技巧和注意事项,需要的朋友参考一下 示例 第1步 第2步 资源

  • 在jHipster中是否可以实现这一特定功能,以使身份验证能够从浏览器或应用程序(不在jHipster服务器上运行)工作?

  • 因此,如果我以角色的身份登录,我就可以很好地访问这个视图。 但是,让我们做一个小的改变,重写一个方法... 这会给我一个...我不明白为什么。 为什么?!! 希望能得到一些帮助来解决这个问题。

  • 我在node.js中通过以下路径生成访问令牌 https://login.microsoftonline.com/{租户-ID}/oauth2/v2.0/token 之后,我得到access_token,但没有范围参数。 当我尝试点击添加了授权标头的 https://graph.microsoft.com/v1.0/users?$filter=startswith(给定名称,“J”)网址时,我得到

  • 我收到了明显臭名昭著的apache 2禁止错误#403,我尝试遵循有关该主题的指南,但似乎都不起作用。我使用的是Ubuntu Server和Apache 2.4.41 我的网站结构类似于/var/www/html/index.html 我的apache2.conf[/etc/apache2/apache2.conf]: 我的vhosts.conf[/etc/apache2/站点可用/000-def

  • 我尝试设置Firebase身份验证,在localhost上它也起作用了。但是当我在Firebase上获得应用程序后,我会得到错误。 我已经在Firebase看过了,域是白名单。 我使用Google登录firebase的代码: 以下是完整的错误消息: