【发布时间】:2017-07-25 01:04:07
【问题描述】:
我创建了一个仪表板,用于汇总多个 Shopify 商店的订单处理。这是一个私人应用程序,因此我将每个 Shopify 商店的 API 凭据和 webhook 密码保存在我的数据库中。我已经使用存储为环境变量的密钥加密了所有这些敏感内容。对于任何给定事件,我将所有 Shopify 商店定向到相同的回调 URL。因此,对于每个 url,我必须根据存储在数据库中的所有可能的 webhook 机密来验证请求正文。我有两个问题:
- 这是一种可以接受的方法来保护商店的 API 凭据和 webhook 机密吗?
- 如果我的秘密存储在数据库中,如何同步验证请求正文?我的验证功能如下。
verify: (buffer, hmacHeader) => {
Brand.find().exec((err, brands) => {
if (!err && brands) {
const allWebhookSecrets = brands.map(brand => {
console.log(`encrypted webhook secret is: ${brand.shopify_webhook_secret_encrypted}`)
return encryption.decrypt(brand.shopify_webhook_secret_encrypted);
});
const webhookIsValid = allWebhookSecrets.some(secret => {
var hmac = crypto.createHmac('sha256', secret)
.update(buffer)
.digest('base64');
return hmac == hmacHeader;
});
console.log(`webhookIsValid: ${webhookIsValid}`);
return webhookIsValid;
}
return false;
});
}
【问题讨论】:
标签: javascript security shopify webhooks