Разрешить только уведомление об изменении объекта в приложении App Engine

Существует приложение Google App Engine, которое обрабатывает Уведомления об изменении объекта .

Как его защитить правильно, чтобы он мог получать только уведомления и не подвергаться никакому другому виду?

0
задан 12 January 2017 в 12:43
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
1
ответ дан 4 December 2019 в 16:23

Теги

Похожие вопросы