HMAC SHA256 выдает другой результат, если строка в переменной переменная в жидкости, Shopify - PullRequest
0 голосов
/ 09 декабря 2018

Я проверяю URL между сайтом Shopify и моим приложением.На Shopify в файле .liquid я создаю значение HMAC, используя встроенный в Shopify строковый фильтр hmac_sha256.Я использую секретный ключ и идентификатор пользователя Twitch, которые я сохранил в теге клиента.

Значение хеша передается в качестве параметра запроса моему приложению, которое использует модуль crypto в файле node.js.чтобы сгенерировать хеш и сравнить его с хешем из URL.

Здесь все становится странно: в файле .liquid, когда я вписываю идентификатор Twitch непосредственно в строковый фильтр, значение хеша генерируется с помощью.Файл Liquid - это то же значение, которое генерирует мое приложение, и все выглядит хорошо:

{{ "12345678" | hmac_sha256: "secret_key" }}

Однако, когда я передаю тот же идентификатор Twitch, что и переменная , встроковый фильтр, хеш-значение, которое генерирует жидкий файл, отличается от первого раза:

{{ twitchId | hmac_sha256: "secret_key" }}

Я уже пытался удалить пробельные символы и символы новой строки из переменной Twitch ID на всякий случайбыли какие-то.Я даже не догадываюсь, в чем может быть проблема.Может быть, переменная (которая является строкой) закодирована иначе, чем когда я ее набираю напрямую?

Для справки, код javascript, проверяющий на совпадение хэши:

    // Get query string params:
    const { hash, twitchId } = req.query;
    console.log('Twitch ID in query: ' + twitchId);

    // Verify user
    const generatedUserHash = crypto
    .createHmac('sha256', userVerifySecret)
    .update(twitchId)
    .digest('hex');

    console.log('Passed hash: ' + hash + ' Generated hash: ' + generatedUserHash);

    if (generatedUserHash == hash) {
        return true;
    } else {
        return false;
    }

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Оказывается, моя переменная twitchId была создана после того, как я пытался использовать ее в фильтре sha256.Я инстанцировал его в своем файле theme.liquid и пытался получить к нему доступ в виде жидкого файла в моем приложении (на запрос с сайта Shopify отвечает жидкий файл).

Я полагаю, яошибочно предположил, что файл theme.liquid загружается раньше, чем файл в моем ответе на Shopify.Я предположил это, потому что переменные javascript, которые я создаю в моем файле theme.liquid , доступны в моем файле ответов (я думаю, это как-то связано с тем, что переменные жидкости создаются на стороне сервера, а переменные javascript создаются клиентом).сторона).

Сейчас я создаю экземпляр переменной twitchId в файле ответов.Так что это решило.

0 голосов
/ 10 декабря 2018

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

Я провел быстрый тест и доказал, что получаю тот же HMAC со строкой и переменной, поэтому, должно быть, вы делаете что-то странное вВаше задание:

<h1>{{ "12345678"  | hmac_sha256: "secret_key" }}</h1>
{% capture fizz %}12345678{% endcapture%}
<h1>{{ fizz   | hmac_sha256: "secret_key"}}</h1>

Производит:

fcfebc0d424982ce8c7a986264beb0d4b1de44507501451e142236404e5b9778 fcfebc0d424982ce8c7a9862641455508015455455755755755755755508455455458508508504

...