Подтвердить слабый запрос - PullRequest
1 голос
/ 11 июля 2019

Я создаю интерактивное сообщение в Slack, поэтому, когда вы нажимаете кнопку, оно возвращает значение моему API.У меня проблемы с проверкой ответа, так как он сделан здесь .

Если я использую значения, указанные в документе в качестве примера, мой тест пройден, но если я использую реальное тело ответа, он не пройдёт.Я считаю, единственное, что может быть причиной ошибки, это неправильное извлечение тела ответа.

Пример данных выглядит так:

token=xyzz0WbapA4vBCDEFasx0q6G&team_id=T1DC2JH3J&team_domain=testteamnow&channel_id=G8PSS9T3V&channel_name=foobar&user_id=U2CERLKJA&user_name=roadrunner&command=%2Fwebhook-collect&text=&response_url=https%3A%2F%2Fhooks.slack.com%2Fcommands%2FT1DC2JH3J%2F397700885554%2F96rGlfmibIGlgcZRskXaIFfN&trigger_id=398738663015.47445629121.803a0bc887a14d10d2c447fce8b6703c

Но мои данные выглядят как объект json:

{""type"":""block_actions"",""team"":{""id"":""TKAKBLC56"",""domain"":""removed""},""user"":{""id"":""UJZ6URSMR"",""username"":""removed"",""name"":""removed"",""team_id"":""removed""},""api_app_id"":""removed"",""token"":""removed"",""container"":{""type"":""message"",""message_ts"":""1562642155.000100"",""channel_id"":""CKCEGGARM"",""is_ephemeral"":false},""trigger_id"":""693043647686.656657692176.b781b587db5dde32e149e03e3442d5ec"",""channel"":{""id"":""CKCEGGARM"",""name"":""general""},""message"":{""type"":""message"",""subtype"":""bot_message"",""text"":""test1"",""ts"":""1562642155.000100"",""username"":""removed"",""bot_id"":""BKE0G32UX"",""blocks"":[{""type"":""actions"",""block_id"":""O4i1"",""elements"":[{""type"":""button"",""action_id"":""DKC"",""text"":{""type"":""plain_text"",""text"":""Farmhouse"",""emoji"":true},""value"":""click_me_123""},{""type"":""button"",""action_id"":""rRVe1"",""text"":{""type"":""plain_text"",""text"":""Kin Khao"",""emoji"":true},""value"":""click_me_123""},{""type"":""button"",""action_id"":""3nT"",""text"":{""type"":""plain_text"",""text"":""Ler Ros"",""emoji"":true},""value"":""click_me_123""}]}]},""response_url"":""https:\/\/hooks.slack.com\/actions\/TKAKBLC56\/690896030256\/yAQ7AGoHcX8HgTcQQH1YnmOM"",""actions"":[{""action_id"":""DKC"",""block_id"":""O4i1"",""text"":{""type"":""plain_text"",""text"":""Farmhouse"",""emoji"":true},""value"":""click_me_123"",""type"":""button"",""action_ts"":""1562799606.639327""}]}

ОБНОВЛЕНИЕ:

Мой метод действия выглядит следующим образом:

[HttpPost]
public IHttpActionResult ProcessResponse(FormDataCollection response)
{
    var rawPayload = response.Get("payload");

    var slackSignature = Request.Headers.GetValues("X-Slack-Signature").FirstOrDefault();
    var timestampString = Request.Headers.GetValues("X-Slack-Request-Timestamp").FirstOrDefault();

    if (slackSignature.IsNullOrWhiteSpace() || timestampString.IsNullOrWhiteSpace()) return Unauthorized();

    if (!int.TryParse(timestampString, out int timestamp)) return BadRequest();

    if (DateTimeOffset.Now.ToUnixTimeSeconds() - timestamp > 60 * 5) return BadRequest();

    var signingSecret = ConfigurationManager.AppSettings["SlackSigningSecret"];

    var isValid = uSlack.Security.Security.IsValidSlackSignature(timestamp, rawPayload, slackSignature, signingSecret);

    return Ok();
}

Я не помещаю код в метод IsValidSlackSignature, поскольку он фактически работает с Slackдемонстрационные данные.

1 Ответ

0 голосов
/ 11 июля 2019

В своем коде вы только включаете данные свойства полезной нагрузки в качестве основы для вычисления подписи:

var rawPayload = response.Get("payload");

Но вам необходимо включить полное тело, включая свойство полезной нагрузки.

...