【问题标题】:How to implement server to server communication using google api in ruby?如何在 ruby​​ 中使用 google api 实现服务器到服务器的通信?
【发布时间】:2017-02-27 13:25:01
【问题描述】:

我有一个 Rails 应用程序,我想在其中使用 Gmail API(using google-api-client 用于 ruby​​)发送电子邮件。我在谷歌开发人员中创建了一个应用程序,并生成了一个服务帐户密钥。我正在使用 google 规范来存储该凭证 JSON 文件(存储在 /home/user/.config/gcloud/applicaton_default_credentials.json 中)。

首先,我想获取user labels 下面是我的代码

require 'google/apis/gmail_v1'
gmail_v1 = Google::Apis::GmailV1
service = gmail_v1::GmailService.new
service.authorization = Google::Auth.get_application_default([gmail_v1::AUTH_SCOPE, gmail_v1::AUTH_GMAIL_COMPOSE, gmail_v1::AUTH_GMAIL_MODIFY, gmail_v1::AUTH_GMAIL_READONLY])
user_id = 'me'
result = service.list_user_labels(user_id)

但这给了我Google::Apis::ClientError: failedPrecondition: Bad Request 错误。

我的最终目标是使用已生成凭据 JSON 文件的电子邮件发送电子邮件,因为我不想将我的用户名和密码放在 ActionMailer 的 smtp 配置中。

【问题讨论】:

    标签: ruby-on-rails ruby google-api gmail service-accounts


    【解决方案1】:

    记住服务帐户不是您。服务帐户是一个虚拟用户,他有一个 Google 驱动器帐户和一个 Google 日历帐户,可能还有更多。但是它没有gmail帐户。

    user_id = '我'

    不适用于服务帐户。

    注意:您不能将服务帐户与普通 gmail 用户帐户一起使用。

    如果这是域帐户用户,那么您可以使用服务帐户电子邮件地址并将其添加为域管理员帐户中的用户。授予它访问用户 gmail 帐户的权限。然后你需要做类似的事情

    user_id = 'user@domain'

    【讨论】:

      【解决方案2】:

      经过几个小时的调试,我终于找到了一个可行的解决方案。 DalmTo 关于服务帐户无法访问 Gmail 的概念是正确的,因为 Gmail 需要用户帐户,但在这种情况下我们可以利用 impersonation 的强大功能。模仿的步骤是:

      1. 转到您的服务帐户。
      2. 向您要模拟的用户授予权限。
      3. 我们需要为这个设置更改我们的代码,如下所示

        service = gmail_v1::GmailService.new
        service.authorization = Google::Auth.get_application_default([gmail_v1::AUTH_SCOPE,    gmail_v1::AUTH_GMAIL_COMPOSE, gmail_v1::AUTH_GMAIL_MODIFY, gmail_v1::AUTH_GMAIL_READONLY])
        auth_client = service.authorization.dup
        auth_client.sub = 'user@domain'
        user_id = 'me'
        result = auth_client.list_user_labels(user_id)
        

      注意:为此,我们需要转到我们的 G-suit 帐户并为我们的服务帐户授予适当的权限。

      【讨论】:

        猜你喜欢
        • 2019-08-03
        • 1970-01-01
        • 1970-01-01
        • 2016-04-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-22
        相关资源
        最近更新 更多