首页 文章

HMAC SHA256产生不同的结果,如果字符串与液体中的变量,Shopify

提问于
浏览
0

我'm doing some URL verification between a Shopify site and my app. On Shopify, in a .liquid file, I' m使用Shopify的内置 hmac_sha256 字符串过滤器创建HMAC值 . 我'm using a secret key and a Twitch user ID which I'已存储在客户标签中 .

散列值作为查询参数传递给我的应用程序,该应用程序使用node.js中的crypto模块生成散列并将其与url中的散列进行比较 .

这里的事情很奇怪:在.liquid文件中,当我直接在字符串过滤器中输入Twitch ID时,.liquid文件生成的哈希值与我的应用程序生成的值相同,并且一切看起来都很好:

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

但是,当我将相同的Twitch ID作为变量传递到字符串过滤器时,液体文件生成的哈希值与第一次不同:

{{ 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

    事实证明我的变量 twitchId 在我尝试在sha256过滤器中使用它之后被实例化了 . 我在我的theme.liquid文件中实例化它,我试图在我的应用程序中的液体文件中访问它(来自Shopify网站的请求用液体文件响应) .

    我想我错误地认为theme.liquid文件是在我对Shopify的回复中的文件之前加载的 . 我假设这是因为我在我的theme.liquid文件中实例化的javascript变量在我的响应液体文件中可用(我认为这与在服务器端创建的液体变量和客户端创建的javascript变量有关) .

    我现在在我的响应液体文件中实例化 twitchId 变量 . 所以这解决了它 .

  • 1

    您需要显示如何将ID分配给变量 . 没有看到,没有办法验证你的问题 .

    我做了一个快速测试,证明我得到了一个字符串和变量相同的HMAC,所以你必须在你的任务中做一些奇怪的事情:

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

    生产环境 :

    fcfebc0d424982ce8c7a986264beb0d4b1de44507501451e142236404e5b9778 fcfebc0d424982ce8c7a986264beb0d4b1de44507501451e142236404e5b9778

相关问题