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

Google推送通知-未经授权的WebHook回调通道

章城
2023-03-14

有人知道我在哪里犯错吗?谢谢你的帮助。

PrivateKey serviceAccountPrivateKey = SecurityUtils.loadPrivateKeyFromKeyStore(SecurityUtils.getPkcs12KeyStore(), p12File, "notasecret", "privatekey", "notasecret");
JsonFactory jsonFactory = new JacksonFactory();
HttpTransport t = GoogleNetHttpTransport.newTrustedTransport();
GoogleCredential gc = new GoogleCredential.Builder()
                .setTransport(t)
                .setJsonFactory(jsonFactory)
                .setServiceAccountScopes(Collections.singleton(DriveScopes.DRIVE))
                .setServiceAccountPrivateKey(serviceAccountPrivateKey)
                .setServiceAccountId(Config.SERVICE_ACCOUNT_ID)
                .setServiceAccountUser(Config.SERVICE_ACCOUNT_USER)
                .build();

drive = new Drive.Builder(t, jsonFactory, null).setHttpRequestInitializer(gc).setApplicationName(cfg.getStringParam(Config.GAE_APPLICATION_NAME)).build();

// THIS WORKS
Changes.List request = drive.changes().list();
ChangeList changes = request.execute();

// THIS DOES NOT WORK
Channel channel = new Channel();
channel.setId(UUID.randomUUID().toString());
channel.setType("web_hook");
channel.setAddress(Config.PUSH_NOTIFICATION_ADDRESS);
Channel c = drive.changes().watch(channel).execute();


-------------- REQUEST  --------------
POST https://www.googleapis.com/drive/v2/changes/watch
Accept-Encoding: gzip
Authorization: Bearer XXX
User-Agent: XXX Google-HTTP-Java-Client/1.17.0-rc (gzip)
Content-Type: application/json; charset=UTF-8
Content-Length: 118

CONFIG: curl -v --compressed -X POST -H 'Accept-Encoding: gzip' -H 'Authorization: Bearer XXX' -H 'User-Agent: XXX Google-HTTP-Java-Client/1.17.0-rc (gzip)' -H 'Content-Type: application/json; charset=UTF-8' -d '@-' -- 'https://www.googleapis.com/drive/v2/changes/watch' << $$$
CONFIG: {"address":"XXX","id":"8078114c-fba0-44e7-a34c-cb391ea40061","type":"web_hook"}

-------------- RESPONSE --------------
401 OK
www-authenticate: Bearer realm="https://accounts.google.com/AuthSubRequest", error=invalid_token

-------------- REQUEST  --------------
POST https://accounts.google.com/o/oauth2/token

-------------- RESPONSE --------------
200 OK
{
  "access_token" : XXX,
  "token_type" : "Bearer",
  "expires_in" : 3600
}

-------------- REQUEST  --------------
POST https://www.googleapis.com/drive/v2/changes/watch

-------------- RESPONSE --------------
401 OK
www-authenticate: Bearer realm="https://accounts.google.com/AuthSubRequest", error=invalid_token

...
...
...

-------------- RESPONSE --------------
200 OK
content-type: application/json; charset=utf-8
cache-control: no-cache, no-store, max-age=0, must-revalidate
pragma: no-cache
expires: Fri, 01 Jan 1990 00:00:00 GMT
date: Wed, 28 May 2014 20:51:19 GMT
content-disposition: attachment; filename="json.txt"; filename*=UTF-8''json.txt
content-encoding: gzip
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
x-xss-protection: 1; mode=block
server: GSE
alternate-protocol: 443:quic
transfer-encoding: chunked

{
  "access_token" : XXX,
  "token_type" : "Bearer",
  "expires_in" : 3600
}

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

共有1个答案

尉迟高澹
2023-03-14

您必须将您的域添加到开发人员控制台。

如何:

  1. 登录到Google开发者控制台
  2. 选择您的项目
  3. 在'APIs&Auth'下选择'Push'
  4. 单击“添加域”
  5. 输入需要的域(只需要域,不需要整个通知url)
  6. 单击“添加域”按钮
 类似资料:
  • 一切看起来都很好,但我不知道问题到底出在哪里。我希望得到帮助

  • 目前,我们正在开发一个处理谷歌日历的iPhone应用程序。需要将日历事件同步到服务器端。一切都很好。 但是对于推送通知,我们遵循这个过程 带参数 在标题中,我们正在发送 和内容类型:json 这里有人能帮我们解决这个问题吗?

  • 这是我尝试过的: 正如这里所解释的,有一些要求: > 步骤1:验证您拥有该域。(使用网站管理员工具完成站点验证过程) null 自签名证书。 由不受信任的来源签名的证书。 已吊销的证书。 主题与目标主机名不匹配的证书。 我所做的: 我已经用SSL证书设置了。 而且,endpoint是可达的,所有内容都检查出来了。 SSL检查器已验证一切正常(5个勾)。即使是SSL链也是正确设置的。检查! null

  • 首先,我想声明我一直在研究推送通知和web通知之间的关系,但我有点困惑。 我从这里读到PWAs的推送通知在Safari上的iOS(iPhone)不起作用:从PWA向iOS发送推送通知 然而,如果iPhone用户使用的是Chrome,这是否意味着它们可以工作呢?或者推送通知在任何浏览器上对iPhone中的PWAs都不起作用? 这就把我带到了web通知。web通知在后台对PWAs起作用吗?我的问题是w

  • 我有一个提交应用程序,当它被拒绝时,我收到了消息 缺少推送通知权利-您的应用程序似乎注册了Apple推送通知服务,但应用程序签名的权利不包括“APS-环境”权利。如果您的应用程序使用Apple推送通知服务,请确定您的应用程序ID已在预置门户中启用推送通知,并在使用包含“APS-环境”授权的分发预置描述文件签署您的应用程序后重新提交。 我检查了我的临时预配,在那里我发现了aps-环境和生产,但是,当

  • 从昨天早上开始,我一直在处理google drive API请求。 正如这里所解释的:https://developers.google.com/drive/api/v3/push 我正在尝试订阅发送此请求的通知: Url:https://www.googleapis.com/drive/v3/changes/watch 响应为代码400,主体为: 此订阅请求不需要此参数,但此订阅请求需要此参数(