如何使用散列值创建正确的用户标识

时间:2019-05-08 13:57:22

标签: node.js session authentication cryptography shopify

对于后端,会话和密码学来说是全新的。因此,我在这里问什么是识别Web应用程序用户的正确方法。

这是故事:

我正在为Shopify电子商务平台开发一个应用程序。商家最初访问应用程序时,Shopify将hmac验证发送到应用程序。当Shopify授权hmac验证后,应用程序将存储“ shopname” cookie并发送回应用程序页面作为响应。 问题是,当商家遵循其他应用程序路线时,没有任何方法可以验证商家是否确实是他/她。应用在这些路线上唯一拥有的信息是“商店名称” cookie。我想出了一些随机散列值来识别商家。我要做的是从随机值创建hmac(作为“应用程序令牌” cookie),并将它们和创建日期存储在“ shopname”值下的数据库中。

当路线获得请求时,应用程序读取“ shopname”和“ app-token” cookie,并向DB询问存储的值。然后检查自创建“应用程序令牌”以来是否不超过1天,从这些值创建hmac并在相等性上验证“应用程序令牌” cookie。如果超过1天的商家被重定向到Shopify hmac授权路线,并且正在生成新的“ app-token” hmac cookie并将其存储到数据库(这是生成它的唯一位置)。

这是“应用令牌”目前的样子:

var random_num = Math.random().toString();
var auth_hash = crypto.createHash('md5').update(random_num).digest('base64');

var auth_hmac_random_num = Math.random().toString();
var auth_hmac = crypto.createHmac('sha256',auth_hash).update(auth_hmac_random_num).digest('hex');

var auth_hmac_concant_random_num = Math.random().toString();
var auth_hmac_concat = crypto.createHash('md5').update(auth_hmac_concant_random_num).digest('hex');

var auth_hmac = auth_hmac_concat + auth_hmac;

auth_hash,auth_hmac_random_num,auth_hmac_concat作为JSON存储在DB的“ shopname”值下。 根据请求验证,将从“应用程序令牌” cookie中删除auth_hmac_concat,并从auth_hash和auth_hmac_random_num创建hmac,并使用crypto.timingSafeEqual(hmac, app_token)将其验证为“应用程序令牌”。

同样,对于后端我是完全陌生的,我可能会过于复杂或简化。问题是在描述的情况下识别商家的正确方法是什么?希望我足够清楚。

1 个答案:

答案 0 :(得分:0)

如果您在商店进行身份验证时创建了会话,那么您就是在做生意。确实没有必要花太多时间来建立自己的下级身份验证。如果存在会话,则商店可以访问您的应用程序。没有会话,请对其进行身份验证。与过去十年中所有有价值的Web应用程序几乎相同的模式,对吗?为什么使事情复杂化?

一种聪明的情况是,当您的应用程序进行了回调并且会话已过期时。在这种情况下,您需要优雅地重新进行身份验证,然后将应用恢复到原来的状态,以使商家满意。没有多少应用程序可以很好地做到这一点,但是可以。