仅允许 App Engine 应用中的对象更改通知

仅允许 App Engine 应用中的对象更改通知

有一个 Google App Engine 应用程序可以处理对象变更通知

如何正确地保护它,以便它只能接收通知而不会暴露给其他任何人?

答案1

建立系统将真实通知与受监视资源区分开并丢弃其他不需要的 POST 消息的一种方法是使用令牌来设置通知渠道。通知消息中的标头应返回相同的令牌。然后只需检查标头是否存在该令牌即可。简而言之,真正的通知消息将在特定标头中包含建议的令牌,因此您只需检查该标头即可确认通知是真实的。

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

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" 
} 

上述命令会创建一个新的通知通道,可用于在监视的对象发生变化时发送通知。此类消息的示例可能如下所示:

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

相关内容