Нет ClientState в сообщении проверки подписки Webhook - PullRequest
0 голосов
/ 29 мая 2018

В настоящее время я подписываюсь на события календаря с:

var request = graphClient.Subscriptions.Request();

var result = await request.AddAsync(
    new Subscription {
        ChangeType = "created,updated,deleted",
            NotificationUrl = notificationUrl,
            Resource = "/users/" + userId + "/" + resource,
            ExpirationDateTime = DateTimeOffset.UtcNow.AddMinutes(4230),
            ClientState = "my-subscription-identifier"
    }
);

Можно объявить ClientState, поэтому, когда уведомление получено, я могу обработать его, сравнив ClientState с состояниемотправлено в запросе на создание подписки?

После того, как я отправил запрос на подписку, сервер отправил мне сообщение проверки.Чего мне не хватает, так это ClientState в запросе проверки от Microsoft Graph.

В документации под уведомления об изменениях запрос описан так:

POST https://{notificationUrl}?validationToken={TokenDefinedByMicrosoftGraph}
ClientState: {Data sent in ClientState value in subscription request (if any)}

К сожалению, я не могу найти состояние клиента в теле запроса проверки (или любой другой части).

  • Правильно ли объявлено состояние клиента?

  • Если да, почему ClientState отсутствует в запросе проверки, как описано в документации (поскольку это представляется важным по соображениям безопасности)?

Редактировать:

Я использую ngrok для тестирования своих веб-крючков.Необработанные данные сообщения о проверке токена, которое я получаю, выглядят так:

POST /?validationToken=NmMwNjE5YjAtNzc3Zi00NmMwLWI1ZmYtYjJiNWI5NzU0MGY5 
HTTP/1.1
Host: localhost:12345
User-Agent: Go-http-client/1.1
Content-Length: 0
Content-Type: text/plain; charset=utf-8
X-Forwarded-For: 
X-Forwarded-Proto: https
X-Original-Host: 5a665085.eu.ngrok.io

Если я получаю уведомление об обновлении, например, тело запроса выглядит так:

{
"value": [
    {
        "subscriptionId": "de6c71b...",
        "subscriptionExpirationDateTime": "2018-06-02T05:11:28.6421943+00:00",
        "changeType": "updated",
        "resource": "Users/9c4661.../Events/AQMkAGY4Y2E0YjZiLTA4ZDctNGJ...",
        "resourceData": {
            "@odata.type": "#Microsoft.Graph.Event",
            "@odata.id": "Users/9c4661.../Events/AQMkAGY4Y2E0YjZiLTA4ZDctNGJ...",
            "@odata.etag": "W/\"DwAAABYAAABzyrM9Qi...\"",
            "id": "AQMkAGY4Y2E0YjZiLTA4ZDctNGJ..."
        },
        "clientState": "my-subscription-identifier"
    }
]
}

1 Ответ

0 голосов
/ 12 июня 2018

Цель первоначальной проверки состоит в том, чтобы Microsoft проверила URL-адрес уведомления клиента: он работает и реагирует, и что он может принимать уведомления.

Валидации должны быть свободными от побочных эффектов и не разглашатьлюбая информация.

До сих пор мы не сталкивались со сценарием, в котором было бы полезно включить clientState, и поэтому мы не включили его в запрос проверки.

Если у вас есть случай, в котором включение дополнительныхинформация в этом запросе будет полезна (например, как часть более крупного сценария / рабочего процесса), можете ли вы кратко описать это?

Примечание: мы скоро обновим документацию, чтобы соответствовать поведению API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...