为node js应用程序中的用户生成唯一的API密钥,以访问您的api

xghobddn  于 2023-05-28  发布在  Node.js
关注(0)|答案(3)|浏览(192)

如何根据数据库中用户的不同参数为nodejs应用程序的用户生成API密钥,以访问我们的服务器端点。

azpvetkf

azpvetkf1#

您可以使用randomUUID,它是节点的加密模块的一部分。然后,您可以获取生成的uuid,使用bcrypt对其进行散列,并将其存储在db中。

const saltRounds = 10;
const token = crypto.randomUUID();
const hashedToken = await bcrypt.hash(token, saltRounds);

在随后的请求中,您可以像这样验证它:

const token = req.body.token // this is an example
bcrypt.compare(token, hashedToken, function(err, result) {
    // result == true
});

您还可以存储创建日期,并使用它来使令牌失效,如果它们已经过了一定的时间。
哈希令牌保护它,以防恶意用户/黑客能够访问数据库。您可以将此解决方案与时间和范围限制相结合,然后您将拥有一个非常可靠的解决方案。

a6b3iqyw

a6b3iqyw2#

当我们谈论生成API密钥时,我总是倾向于使用uuid或crypto库。要保护密钥,请在将密钥保存到数据库之前对其进行加密。要加密密钥,您可以使用Google的密钥管理服务(KMS)和JWT,但我更喜欢使用KMS。

efzxgjgh

efzxgjgh3#

您可以使用不同的参数来生成API密钥并将其存储在数据库中以供不同的用户使用。

示例:

1.数据库中有用户的***用户名***和***邮箱***。
1.将两者相加以生成一个新字符串并将其存储在变量中
1.然后转换为***Base64***,存储在你的数据库中用户的apiKey列。

代码

data = req.body.email+req.body.username;
let apiKey = Buffer.from(data).toString('base64')

使用此API密钥更新该用户的数据库列,用户可以使用该API密钥访问您的服务器端点。

相关问题