【问题标题】:Google calendar api Push notification: 401 - Unauthorized WebHook callback channel谷歌日历 api 推送通知:401 - 未经授权的 WebHook 回调通道
【发布时间】:2016-10-20 13:55:42
【问题描述】:

问题的任何解决方案。这似乎不起作用

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "push.webhookUrlUnauthorized",
    "message": "Unauthorized WebHook callback channel: https://xxxxx"
   }
  ],
  "code": 401,
  "message": "Unauthorized WebHook callback channel: https://xxxxx"
 }
}

无论如何解决这个问题

【问题讨论】:

    标签: push-notification google-calendar-api


    【解决方案1】:

    推送通知要求您已验证域所有权,因此无法在 API Explorer 中创建,因为它不提供将请求与您已验证所有权的项目相关联的方法。如果您使用项目凭据,这可以在 OAuth Playground 中完成,详情如下:

    • 配置 API 项目:

      1. 通过 https://console.developers.google.com/project/ 访问您的 API 项目。
      2. 确保您已按照https://developers.google.com/admin-sdk/directory/v1/guides/push#registering-your-domain 处的说明注册了网站的 HTTPS 版本。
      3. 从“产品和服务”菜单(左上角的三个水平线)中,选择“API Manager”,然后选择“启用的 API”选项卡,并确保启用了相应的 API。
      4. 选择“凭据”,然后从“添加凭据”下拉列表中选择“Oauth 客户端 ID”。
      5. 如果之前未配置,系统会提示您配置同意屏幕,因此请点击“配置同意屏幕”。如果是这样,请输入您的电子邮件地址、产品名称,然后点击“保存”。
      6. 选择“Web 应用程序”,然后输入客户端 ID 的名称。
      7. 在“授权的 Javascript 来源”下输入“https://developers.google.com”。
      8. 在“授权重定向 URI”下,输入“https://developers.google.com/oauthplayground”。
      9. 点击“创建客户端 ID”。
    • 配置 OAuth Playground:

      1. 导航到https://developers.google.com/oauthplayground/
      2. 点击右上角的“OAuth 2.0 配置”(齿轮图标)。
      3. 选中“使用您自己的 OAuth 凭据”。
      4. 将 API 项目的“凭据”页面中的“客户端 ID”粘贴到“OAuth 客户端 ID”中。
      5. 将 API 项目的“凭据”页面中的“客户端密码”粘贴到“OAuth 客户端密码”中。
      6. 点击“关闭”。
    • 授权 API 请求:

      1. 在“输入您自己的范围”中输入https://www.googleapis.com/auth/admin.directory.user
      2. 单击“授权 API”。
      3. 系统将提示您允许 API 访问您的域,因此请单击“允许访问”。
      4. 您将看到响应“HTTP/1.1 302 Found”。单击“交换令牌授权码”。
      5. 您应该会看到“HTTP/1.1 200 OK”。稍后该页面将下拉到下一部分。
      6. 选择 POST 作为“HTTP 方法”。
      7. 点击“输入请求正文”,输入您的请求,例如:

        { "id": "c887ce64-adc8-4007-952c-a172c376b30d", "type": "web_hook", "address": "https://example.com/watch" }

      8. 完成后点击“关闭”。

      9. 输入您要监控的资源的 URI,将 {calendarId} 替换为适当的日历 ID,例如: https://www.googleapis.com/calendar/v3/calendars/user@example.com/events/watch
      10. 点击“发送请求”。

      11. 您应该会收到类似于以下内容的响应:

        { "resourceId": "DmuNd7MI-w7qwW1FxDNf_pdqk7Y", "kind": "api#channel", "expiration": "1507327087000", "id": "c887ce64-adc8-4007-952c-a172c376b30d", "resourceUri": "https://www.googleapis.com/calendar/v3/calendars/user@example.com/events?maxResults=250&alt=json" }

    注意:其他 API 的推送通知,例如 Directory API,可能有额外的参数。有关详细信息,请查看相关的参考文档。

    【讨论】:

    • 这是为我做的,现在我明白了问题所在,我生成的令牌是用于应用程序 Oauth 游乐场而不是我自己的应用程序谢谢
    【解决方案2】:

    要在 Google 日历中使用 Push Notifications,请确保您按照此处的说明进行操作:

    1. 在 Google Dev Console 中注册接收 URL 的域。转到凭据并单击域验证以进行 webhook 设置。

    例如,如果您打算使用https://yourdomainexample.com/notifications 作为您的接收网址,您需要注册https://yourdomainexample.com。 设置您的接收 URL,或“Webhook”回调接收器。

    1. 这是一个 HTTPS 服务器,用于处理资源更改时触发的 API 通知消息。

    2. 为您要观看的每个资源端点设置通知通道。

    通道指定通知消息的路由信息​​。作为通道设置的一部分,您确定要接收通知的特定 URL。每当频道的资源发生变化时,Google 日历 API 都会将通知消息作为 POST 请求发送到该 URL。

    您也可以查看此SO thread 以获取更多参考。

    【讨论】:

    【解决方案3】:

    这个修复帮助我解决了这个问题。我没有提到谷歌应用程序授权重定向网址中的回调链接。 添加后,我能够生成监视事件并能够接收推送通知消息

    【讨论】:

    • 我在哪里可以做到这一点? @NaveenKoti
    猜你喜欢
    • 2016-04-13
    • 2017-07-20
    • 2018-03-06
    • 2014-07-18
    • 2021-04-15
    • 2017-06-06
    • 2014-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多