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

使用oauth2client创建google api凭据(从具有范围和委托帐户的服务帐户)

司寇照
2023-03-14

为了访问GMail API(并将呼叫拟人化),我使用了一个服务帐户(从谷歌云平台创建)。我的json文件看起来像这样

{
"type": "service_account",
"project_id": "[PROJECT-ID]",
"private_key_id": "[KEY-ID]"
"private_key": "-----BEGIN PRIVATE KEY-----\n[PRIVATE-KEY]\n-----END PRIVATE KEY-----\n",
"client_email": "[SERVICE-ACCOUNT-EMAIL]",
"client_id": "[CLIENT-ID]",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://accounts.google.com/o/oauth2/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/[SERVICE-ACCOUNT-EMAIL]"
}

我还使用oAuth2client库使其更容易,但我找不到创建凭据然后指定范围和委托帐户的方法。

我试过了

from oauth2client import service_account

self._credentials = service_account.ServiceAccountCredentials.from_json(SERVICE_ACCOUNT_JSON_CONTENT)
self._credentials = self._credentials.create_scoped([u'https://www.googleapis.com/auth/gmail.send'])
self._credentials = self._credentials.create_delegated(MY_USER)
        self._client = discovery.build(u'gmail', u'v1', credentials=self._credentials)

但是我得到了一个错误,因为它需要一个PKCS-8密钥。

我该怎么做?(如果有帮助,我的代码在应用程序引擎 Flex 上运行)

谢啦

共有1个答案

晋涛
2023-03-14

最后,由于 oauth2client 现在已被弃用,转而使用谷歌身份验证,因此我确实

from googleapiclient import discovery
from google.oauth2.service_account import Credentials

credentials = Credentials.from_service_account_file(PATH_TO_SERVICE_ACCOUNT_JSON,
                                                                  scopes=[u'https://www.googleapis.com/auth/gmail.send'])
delegated_credentials = self._credentials.with_subject(MY_USER)
client = discovery.build(u'gmail', u'v1', credentials=delegated_credentials)

它成功了。-)

 类似资料:
  • 我目前使用的谷歌服务帐户启用了域范围的委托(我使用了这个链接https://developers.Google.com/identity/protocols/oauth2/service-account,和这个链接https://developers.Google.com/admin-sdk/reports/v1/guides/developy),并且启用了“https://www.googlea

  • 我们需要访问谷歌日历API与服务器应用程序,以创建事件和邀请与会者。谷歌建议使用服务帐户的应用程序。 这里的主要问题是与会者邀请参加活动,因为如果没有域范围的授权,服务帐户就不能这样做(请参见img)。 组织不希望授予服务帐户访问所有用户数据的权限。所以,我想知道我们是否可以将域范围的授权委托给域的一个用户?(限制访问以使用其他用户的数据)。 附言。它只是关于谷歌日历API。 非常感谢你的帮助。

  • 我正在构建一个需要读取普通Gmail收件箱(不是域的一部分)的Web服务。 代码: 错误: 我看不出这有什么原因不起作用,但读完这篇文章后,你似乎不能在个人@gmail帐户上使用服务帐户凭据。有谁知道这是真的还是我做错了什么? 感谢您的帮助! 更新 如果我将更改为,我可以查看邮件,但无法修改标签,这是我的要求。

  • 问题内容: 我已经阅读了2天的教程并看到了示例,但没有成功。我想在NodeJS环境中使用Google Apps Gmail帐户发送电子邮件,但是我得到了Google API的回复: 到目前为止,这是我所做的: 在Google Cloud Platform中创建了一个项目 创建一个服务帐号 已为服务帐户启用 以格式下载了服务帐户的密钥 > 我创建了 为项目启用了Gmail API 在Google A

  • 我在我的Google Apps域上创建了一个服务号,启用了域范围的委托,并在服务号的客户端ID上从我的域的控制面板启用了完整的gmail和pubsub API范围。 我可以成功实例化gmail API客户端,并通过以下方式模拟域的一个帐户: 我正在尝试使用以下命令在模拟用户的帐户上设置推送通知webhook。指定的主题名称有效。 在呼叫观看后,我收到以下错误: 调用其他gmail API方法(列表

  • 因此,我正在尝试在我的本地主机上获取服务应用程序凭据,并且遇到了一些问题。我创建并下载了json密钥,我想保护它们,而不是让它们变成纯文本。 我想知道最好的方法。我有这个代码: 这里的问题是我的JSON文件在我的存储库中以纯文本形式公开。