我'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 回答
事实证明我的变量
twitchId
在我尝试在sha256过滤器中使用它之后被实例化了 . 我在我的theme.liquid文件中实例化它,我试图在我的应用程序中的液体文件中访问它(来自Shopify网站的请求用液体文件响应) .我想我错误地认为theme.liquid文件是在我对Shopify的回复中的文件之前加载的 . 我假设这是因为我在我的theme.liquid文件中实例化的javascript变量在我的响应液体文件中可用(我认为这与在服务器端创建的液体变量和客户端创建的javascript变量有关) .
我现在在我的响应液体文件中实例化
twitchId
变量 . 所以这解决了它 .您需要显示如何将ID分配给变量 . 没有看到,没有办法验证你的问题 .
我做了一个快速测试,证明我得到了一个字符串和变量相同的HMAC,所以你必须在你的任务中做一些奇怪的事情:
生产环境 :
fcfebc0d424982ce8c7a986264beb0d4b1de44507501451e142236404e5b9778 fcfebc0d424982ce8c7a986264beb0d4b1de44507501451e142236404e5b9778