错误403:向Cloud PubSub发送测试消息时出错:用户未被授权执行此操作

时间:2017-09-09 17:48:01

标签: php push-notification gmail gmail-api google-cloud-pubsub

我想设置推送通知监视但我收到错误响应。我需要什么授权?

请求:

// Google API
$client = getClient();

// POST request    
$ch = curl_init('https://www.googleapis.com/gmail/v1/users/me/watch');

curl_setopt_array($ch, array(
    CURLOPT_POST => TRUE,
    CURLOPT_RETURNTRANSFER => TRUE,
    CURLOPT_HTTPHEADER => array(
        'Authorization: Bearer ' . $client->getAccessToken()['access_token'],
        'Content-Type: application/json'
    ),
    CURLOPT_POSTFIELDS => json_encode(array(
        'topicName' => 'projects/xxxx/topics/xxxx',
        'labelIds' => ["INBOX"]
    ))
));

响应:

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "forbidden",
    "message": "Error sending test message to Cloud PubSub projects/xxxx/topics/xxxx : User not authorized to perform this action."
   }
  ],
  "code": 403,
  "message": "Error sending test message to Cloud PubSub projects/xxxx/topics/xxxx : User not authorized to perform this action."
 }
}

更多详情:

  • 使用的范围是GMAIL_READONLY
  • 存在主题和主题,它们是在同一个控制台中创建的。
  • 我尝试从控制台发布新消息,但它已经有效。

3 个答案:

答案 0 :(得分:7)

来自页面:https://developers.google.com/gmail/api/guides/push#grant_publish_rights_on_your_topic

  

Cloud Pub / Sub要求您授予Gmail发布权限   通知您的主题。

     

要执行此操作,您需要向其授予发布权限   serviceAccount:gmail-api-push@system.gserviceaccount.com。你可以做   这使用Cloud Pub / Sub Developer Console权限界面   遵循资源级访问控制指令。

(强调补充)

答案 1 :(得分:2)

您必须授予对主题的权限。 转到您的主题列表 或单击下面的链接https://console.cloud.google.com/cloudpubsub/topic

然后单击您的主题 enter image description here

然后在右侧的权限标签中,点击“添加会员”按钮 enter image description here

然后输入新的成员电子邮件,或者如果您的应用具有多个用户,则可以输入 allUsers 。然后选择角色发布/订阅发布者,然后点击保存按钮。 enter image description here

答案 2 :(得分:1)

不要添加allAuthenticatedUsersallUsers,这将使您的主题公开。您可能已经看到此警告

此资源是公共资源,任何互联网上的人都可以访问。 要删除公共访问权限,请删除“ allUsers”和“ allAuthenticatedUsers” 来自资源成员。

不要这样做


相反,添加gmail-api-push@system.gserviceaccount.com。这将起作用。 参考:https://developers.google.com/gmail/api/guides/push#grant_publish_rights_on_your_topic