Hyp*_*olf 6 security api-design node.js
Google、Stripe 和许多其他公司都有公共 API 密钥和秘密 API 密钥。
生成随机字符串很容易,但我的问题是,如何生成公钥和私钥、存储它们并正确使用它们?
公共 API 密钥用于告知用户是谁,秘密用于确认用户的身份。
我的流程如下: - 用户创建帐户 - 用户激活服务(内部) - 服务返回公共和秘密 API 密钥(UARRHAtPtJcLxx5RmMWo9oTrca4gRt2k、C9YS7Mhzichq2vqBuRkNJxkNci5W2Xua) - 用户在他/她的网站和网站上使用公共密钥服务器端的私钥
我使用的是nodejs,当用户请求API密钥时,公钥是按需生成的:
let public = await crypto.randomBytes(32).toString('base64');
将秘密存储在数据库中就像以明文存储密码一样。我想我们不想要这个,它需要以某种方式进行散列。例如,我是否生成一个“私钥”并使用 argon2 对其进行哈希处理?用户将永远无法再次看到他/她的密钥,并且需要立即保存它,这是一个好的做法吗?
我找不到太多关于这应该如何工作的信息。
从技术上讲,您所指的只是用户名和密码。唯一重要的区别是这些通常由 API 生成并且非常随机,而不是由用户选择的真实用户名和密码,并且通常不是非常随机。(调用这些公钥和私钥有点误导,因为公钥密码学是不同的——你通常不需要 API 密钥,管理 PKI 是一堆蠕虫,而且正确执行它的成本也很高。)
由于这些在技术上与用户名和密码相同,因此您希望以类似方式对待它们。让我们称这些客户端 ID(“公共”部分)和客户端密钥(“秘密”部分)。
一些想法:
crypto.randomBytes()如上所述很好。log2(62^22) =~ 130.99)。当然,您总是可以使用更长的时间,对于 256 位,您需要长度为 43 且区分大小写的字母数字。| 归档时间: | 
 | 
| 查看次数: | 2397 次 | 
| 最近记录: |