node.js - 如何使用哈希值创建正确的用户标识

标签 node.js session authentication cryptography shopify

对于后端、 session 和密码学来说是全新的。所以我在这里问什么是识别网络应用程序用户的正确方法。

故事是这样的:

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

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

这就是“应用程序 token ”目前的样子:

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 形式存储到“shopname”值下的数据库中。 根据请求验证,auth_hmac_concat 将从“app-token”cookie 中删除,hmac 是根据 auth_hash 和 auth_hmac_random_num 创建的,并通过 crypto.timingSafeEqual(hmac, app_token) 验证为“app-token”。

再说一遍,我对后端完全陌生,我可能会把事情过于复杂化或过于简单化。问题是在所述情况下识别商家的正确方法是什么?希望我说得足够清楚。

最佳答案

如果您在商店进行身份验证时创建 session ,则您可以正常营业。确实没有必要竭尽全力来构建自己的下一级身份验证。如果存在 session ,商店就可以访问您的应用程序。没有 session ,请验证它们。与过去十年中任何和所有有值(value)的网络应用程序几乎相同的模式,对吗?为什么要把事情复杂化?

您可以聪明的一种情况是当您的应用程序有您进行的回调并且 session 已过期时。在这种情况下,您需要优雅地重新验证并将应用程序恢复到原来的位置,以善待商家。没有多少应用程序能很好地做到这一点,但您可以。

关于node.js - 如何使用哈希值创建正确的用户标识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56042508/

相关文章:

php - 在 php 中设置安全 session cookie

java - 托管 Bean 注销不起作用

rest - 通过发送明文密码通过 REST 服务登录是否可以/常见做法?

node.js - Nrwl Nx 构建 Node 项目只转译 main.ts

c# - 我应该如何保存 HttpPostedFile

javascript - 使用reflux创建一个公共(public)组件,最后一个组件的数据替换所有

c# - Azure AD 身份验证 : Permission error while fetching access token

ruby-on-rails - 使用设备发送注册确认邮件

windows - NPM 已停止在 Windows 7 64 位上工作,在安装/更新时挂起

node.js - 使用socket.io确保多个应用程序实例上有唯一的socket.id