我正在使用Twitch OAuth API构建一个Node应用程序,我需要存储用户的访问和刷新令牌。我做了一些谷歌研究,主要是遵循the Nest.js docs(因为我使用的是Nest)。
这是加密令牌的代码。IV和盐是预先创建的(使用crypto.randomBytes(16)
),并作为参数传递。
const key = (await promisify(scrypt)(process.env['CRYPT_PW'], salt, 32)) as Buffer,
cipher = createCipheriv('aes-256-ctr', key, iv);
return Buffer.concat([
cipher.update(token),
cipher.final(),
]);
CRYPT_PW
存储在环境变量中,IV和salt与相应的用户密钥一起存储在DB中。这是否足以存储OAuth令牌?如果没有,我需要改变什么?谢谢你,谢谢
1条答案
按热度按时间bzzcjhmw1#
总的来说,我会说是的,它足够安全。我自己也是这么做的。然而,我有几点意见必须确保,其他人可能也会觉得有用。
CRYPT_PW
的长度应至少为64个字符,以最大限度地利用AES 256位加密的全部强度。CRYPT_PW
应该存储在某种安全存储中,并在部署期间获取一次。例如,如果您使用AWS,则可以使用Secrets Manager。1.您不一定需要生成随机盐,因为IV将为相同的密钥生成不同的密码。