我正在使用Embedded APP SDK(用于构建Shopify应用程序),它允许我在管理面板中显示一个网页。让我们说Shopify App有一个/ shopifyApp的网址。每当用户点击所述应用程序时,他都会被重定向到“/ shopifyApp”。 get请求看起来像 /shopifyApp?hmac=b20934d6b66cxxx&protocol=https%3A%2F%2F&shop=dev-store-61.myshopify.com×tamp=1466715935
我正在尝试验证hmac是否有效。我使用下面的代码进行验证,但遗憾的是它无效。
var map = JSON.parse(JSON.stringify(req.query));
delete map['hmac'];
var message = querystring.stringify(map);
var generated_hash = require('crypto').createHmac('sha256', "myAppSecret").update(message).digest('hex');
if (generated_hash === req.query.hmac) {
//show Authenticated page
} else {
//Show unauthenticated page
}
由于某种原因,生成的has永远不会等于hmac。有人可以告诉我我做错了什么吗?
答案 0 :(得分:0)
您需要删除hmac和签名
function verifyRequest(req, res, next) {
var map = JSON.parse(JSON.stringify(req.query));
delete map['signature'];
delete map['hmac'];
var message = querystring.stringify(map);
var generated_hash = crypto.createHmac('sha256', config.oauth.client_secret).update(message).digest('hex');
if (generated_hash === req.query.hmac) {
next();
} else {
return res.json(400);
}
}