只允许在App Engine应用程序中的对象更改通知

有一个Google App Engine应用程序处理对象更改通知 。

如何正确保护它,所以它只能收到通知,不会暴露给其他任何东西?

build立一个从被监视的资源中分离真正通知的系统,以及放弃其他不需要的POST消息的一种方式是在build立通知通道时使用令牌。 应该通过通知消息中的标题返回相同的标记。 那么简单地检查标题是否存在该标记就足够了。 简而言之,真正的通知消息将在特定的头部中提供令牌,因此您只需检查该头部以确认通知是可信的。

例如,要使用名为“ClientToken”的令牌设置此function,您可以运行gsutil notification命令:

gsutil notification watchbucket [-i ChannelId] [-t ClientToken] ApplicationUrl gs://BucketName 

由上述命令生成的结果请求可能看起来类似于:

 POST /storage/v1/b/BucketName/o/watch?alt=json HTTP/1.1 Host: www.googleapis.com Content-Length: 200 User-Agent: google-api-python-client/1.0 Content-Type: application/json Authorization: Bearer OAuthToken { "token": "ClientToken", "type": "web_hook", "id": "ChannelId", "address": "ApplicationUrl" } 

以上命令将创build一个新的通知通道,可用于在观察对象发生更改时发送通知。 这种消息的示例可能如下所示:

 POST /ApplicationUrlPath Accept: */* Content-Type: application/json; charset="utf-8" Content_Length: 0 Host: ApplicationUrlHost X-Goog-Channel-Id: ChannelId X-Goog-Channel-Token: ClientToken X-Goog-Resource-Id: ResourceId X-Goog-Resource-State: sync X-Goog-Resource-Uri: https://www.googleapis.com/storage/v1/b/BucketName/o?alt=json 

这个消息的结构可以让你轻松识别包含在头部X-Goog-Channel-Token帮助下的客户令牌:

 X-Goog-Channel-Token: ClientToken