Google Calendar API服务帐户授权无效

时间:2017-02-10 18:38:35

标签: ruby-on-rails google-api google-calendar-api

我正在尝试使用谷歌日历使用服务帐户授权我的应用程序谷歌日历。现在我遇到了一个问题,由于某种原因,没有加载凭据。

这是我的授权码:

scopes = 'https://www.googleapis.com/auth/calendar'
authorization = Google::Auth.get_application_default(scopes)
cal = Google::Apis::CalendarV3::CalendarService.new
cal.authorization = authorization
cal.authorization.fetch_access_token!

以下是我收到的错误消息: enter image description here

我在ENV变量中有client_secrets.json文件,如google的文档中所述。我还将该文件中的每个元素都作为ENV变量,因为它在google auth源代码中指定。

任何人都可以提供有关授权工作的任何见解吗?

2 个答案:

答案 0 :(得分:0)

强烈建议您Using OAuth 2.0 for Server to Server Applications使用库,例如​​Google API客户端库。

正如Creating a service account中讨论的那样,

  

如果您的应用程序未在Google App Engine或Google Compute Engine上运行,则必须在Google API控制台中获取这些凭据。要生成服务帐户凭据,或查看已生成的公共凭据,请执行以下操作:

     
      
  1. 打开Service accounts page。如果出现提示,请选择一个项目。
  2.   
  3. 点击创建服务帐户
  4.   
  5. 创建服务帐户窗口中,键入服务帐户的名称,然后选择提供新的私钥。如果您想grant G Suite domain-wide authority到服务帐户,也请选择启用G Suite全域代表团。然后点击创建
  6.         

    生成新的公钥/私钥对并将其下载到您的计算机上;它是此密钥的唯一副本。您有责任安全地存储它。

此外,我还建议您访问Google Application Default Credentials以获取有关默认凭据的更多详细信息。

对于Ruby,默认凭据由适用于Ruby的Google API客户端库提供,版本0.1.0及更高版本。在应用程序代码中调用应用程序默认凭据时,导入googleauth gem,然后传递您需要访问Google::Auth.get_application_default的范围:

require 'googleauth'
scopes =  ['https://www.googleapis.com/auth/cloud-platform', 'https://www.googleapis.com/auth/devstorage.read_only']
authorization = Google::Auth.get_application_default(scopes)

然后,使用凭据访问API服务,如下所示:

require "google/apis/storage_v1"
storage = Google::Apis::StorageV1::StorageService.new
storage.authorization = authorization

希望有所帮助!

答案 1 :(得分:0)

遇到了类似的问题。您是否在日历上授权了服务帐户的电子邮件地址?只需转到谷歌日历,将鼠标悬停在名称上,然后在共享下,添加具有适当权限的服务帐户的电子邮件地址。这为我解决了问题。