【问题标题】:Can Google API domain-wide delegation service accounts enable gmail push through impersonating a user?Google API 域范围的委派服务帐户可以通过模拟用户启用 gmail 推送吗?
【发布时间】:2016-03-27 02:56:15
【问题描述】:

我在我的 Google Apps 域上创建了一个服务帐户,启用了域范围的委派,并从我的域的控制面板在服务帐户的客户端 ID 上启用了完整的 gmail 和 pubsub API 范围。

我可以成功地实例化一个 gmail API 客户端并模拟一个域的帐户:

    credentials = oauth2client.SignedJwtAssertionCredentials(secret['client_email'], secret['private_key'], ['https://www.googleapis.com/auth/gmail.modify'], sub='accountToImpersonate@domain.com')

    http = httplib2.Http()
    credentials.authorize(http)

    return discovery.build('gmail', 'v1', http=http)

我正在尝试使用以下内容在模拟用户的帐户上设置推送通知 webhook。指定的主题名称有效。

  request = {
    'labelIds': ['INBOX'],
    'topicName': 'projects/projectName/topics/topicName'
  }

  gmail.users().watch(userId='me', body=request).execute()

我在调用 watch 后收到以下错误:

<HttpError 400 when requesting https://www.googleapis.com/gmail/v1/users/me/watch?alt=json returned "Invalid developer ID">

调用其他 gmail API 方法(列表消息等)成功。

具有域范围委派的服务帐户是否能够在域用户的帐户上启用 gmail 推送通知 webhook?

【问题讨论】:

  • 我已经尝试过了,是的,这是可能的。您是否在您的主题中授予了对 gmail 的访问权限?
  • 您找到解决方案了吗?我遇到了完全相同的问题,gmail-api-push@system.gserviceaccount.com 确实被授予了我的主题的发布权限。
  • 我不确定(还)是否要自己实现这个。但是,如果您首先冒充该用户,然后尝试使用该用户订阅该主题,他们似乎需要访问该主题。可能尝试而不是冒充他们,只使用服务帐户并提供实际的 userId 而不是说 userId="me"... 如gmail.users().watch(userId='xxxxxxxxx', body=request).execute()

标签: google-api gmail-api google-api-python-client google-oauth


【解决方案1】:

我最近通过服务帐户成功地做到了这一点 ^^,只需在 pubsub 客户端设置调用中传递用户的电子邮件地址而不是“我”

【讨论】:

    猜你喜欢
    • 2023-04-03
    • 2016-09-11
    • 2020-09-06
    • 2023-03-23
    • 1970-01-01
    • 2015-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多