检测请求是否来自Shopify管理面板

时间:2016-06-23 21:16:29

标签: node.js oauth passport.js shopify hmac

我正在使用Embedded APP SDK(用于构建Shopify应用程序),它允许我在管理面板中显示一个网页。让我们说Shopify App有一个/ shopifyApp的网址。每当用户点击所述应用程序时,他都会被重定向到“/ shopifyApp”。 get请求看起来像 /shopifyApp?hmac=b20934d6b66cxxx&protocol=https%3A%2F%2F&shop=dev-store-61.myshopify.com&timestamp=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。有人可以告诉我我做错了什么吗?

1 个答案:

答案 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);
}

}