Azure Microsoft Graph API - подписка - запрос проверки не выполнен - PullRequest
2 голосов
/ 14 марта 2019

Я пытаюсь настроить уведомление об изменениях пользовательских данных Azure (https://docs.microsoft.com/en-us/graph/webhooks).

. Я отправляю запрос от локального клиента в API Azure Graph, и у меня есть общедоступный сервер (с SSL)в полезной нагрузке запроса в качестве URL-адреса уведомления.

Azure теперь отправляет запрос сообщений на мой сервер (как в документации - точный запрос сообщений см. ниже), и я пытаюсь отправить полученный токен (как вдокументации). Но я всегда получаю следующее сообщение об ошибке «Ошибка проверки подписки. Ответ должен точно соответствовать параметру запроса validationToken.»

Отправка запроса из Azure:

Path: /?validationToken=Validation%3a+Testing+client+application+reachability+for+subscription+Request-Id%3a+3b3f9821-ce3f-23d9-879b-00a23f3 Body: is empty

Я перепробовал каждую часть и кодировку пути (например, просто идентификатор запроса или весь путь), но всегда получаю сообщение об ошибке. Так что же нужно отправить обратно?

Ответы [ 2 ]

2 голосов
/ 14 марта 2019

Во-первых, полученный вами токен проверки должен рассматриваться как непрозрачное значение и возвращаться без изменений , а ошибка Subscription validation request failed. Response must exactly match validationToken query parameter пытается сообщить вам, что что-то изменилось.

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

Вот соответствующая документация из Документов Microsoft: Проверка конечной точки уведомления

POST https://{notificationUrl}?validationToken={opaqueTokenCreatedByMicrosoftGraph}

enter image description here

Другие требования (из той же ссылки):

  • ответ в течение 10 секунд
  • 200 (ОК) код состояния.
  • тип содержимого должен быть text / plain.
  • тело должно включать токен проверки.

Примеры кода

Пример ASP.NET MVC - специально посмотрите на файл NotificationController.cs

    [HttpPost]
    public async Task<ActionResult> Listen()
    {

        // Validate the new subscription by sending the token back to Microsoft Graph.
        // This response is required for each subscription.
        if (Request.QueryString["validationToken"] != null)
        {
            var token = Request.QueryString["validationToken"];
            return Content(token, "plain/text");
        }

Пример кода Node.js - Специально посмотрите на listen.js

/* Default listen route */
listenRouter.post('/', (req, res, next) => {
  let status;
  let clientStatesValid;

  // If there's a validationToken parameter in the query string,
  // then this is the request that Office 365 sends to check
  // that this is a valid endpoint.
  // Just send the validationToken back.
  if (req.query && req.query.validationToken) {
    res.send(req.query.validationToken);
    // Send a status of 'Ok'
    status = 200;
  }
0 голосов
/ 14 марта 2019

Вы должны вернуть validationToken из строки запроса с кодом ответа HTTP 200.Вы также должны сделать это в течение нескольких секунд, иначе график не выполнит запрос, и ваш запрос на создание подписки не удастся.

Вот пример конечной точки проверки в ASP.NET Web API 2:

public ActionResult<string> Post([FromQuery]string validationToken = null)
{
    if(!string.IsNullOrEmpty(validationToken))
    {
        Console.WriteLine($"Token: '{validationToken}'");
        return Ok(validationToken);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...