我正在尝试使用谷歌日历使用服务帐户授权我的应用程序谷歌日历。现在我遇到了一个问题,由于某种原因,没有加载凭据。
这是我的授权码:
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!
我在ENV变量中有client_secrets.json文件,如google的文档中所述。我还将该文件中的每个元素都作为ENV变量,因为它在google auth源代码中指定。
任何人都可以提供有关授权工作的任何见解吗?
答案 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控制台中获取这些凭据。要生成服务帐户凭据,或查看已生成的公共凭据,请执行以下操作:
- 打开Service accounts page。如果出现提示,请选择一个项目。
- 点击创建服务帐户。
- 在创建服务帐户窗口中,键入服务帐户的名称,然后选择提供新的私钥。如果您想grant G Suite domain-wide authority到服务帐户,也请选择启用G Suite全域代表团。然后点击创建。
醇>生成新的公钥/私钥对并将其下载到您的计算机上;它是此密钥的唯一副本。您有责任安全地存储它。
此外,我还建议您访问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)
遇到了类似的问题。您是否在日历上授权了服务帐户的电子邮件地址?只需转到谷歌日历,将鼠标悬停在名称上,然后在共享下,添加具有适当权限的服务帐户的电子邮件地址。这为我解决了问题。