Google、Stripe和其他许多公司都有公开的API密钥和秘密API密钥。
生成随机字符串很容易,但我的问题是,如何生成公共密钥和秘密密钥,存储它们并正确使用它们?
公共API的关键是告诉用户是谁,而秘密是确认用户的身份。
我的流程如下:-用户创建帐户用户激活服务(内部)服务返回公共和秘密API密钥(UARRHAtPtJcLxx5RmMWo9oTrca4gRt2k,C9YS7Mhzichq2vqBuRkNJxkNci5W2Xua)用户在他/她的网站上使用公钥,在服务器端使用私钥。
当用户请求API密钥时,我使用nodejs并根据需要生成公钥:
let public = await crypto.randomBytes(32).toString('base64');将秘密存储在数据库中就像将密码存储在明文中一样。我想我们不想这样,它需要被打散。例如,我是否生成“私有”密钥并使用argon2对其进行散列?用户将永远无法再次看到他/她的密钥,并需要立即保存它,这是一个很好的实践吗?
我找不到多少关于这应该如何工作的信息。
发布于 2021-04-07 09:58:20
从技术上讲,你所指的只是一个用户名和一个密码。唯一重要的区别是它们通常是由API和非常随机生成的,而不是由用户选择的真实用户名和密码,并且通常不是很随机。(对这些公钥和私钥的调用有点误导,因为公钥加密是不同的--对于API密钥来说,通常不需要这样做,管理PKI是一种蠕虫,而且正确地管理PKI也非常昂贵。)
由于它们在技术上与用户名和密码相同,所以您需要对它们进行类似的处理。让我们调用这些客户机id (“公共”部分)和客户端密钥(“秘密”部分)。
几点想法:
crypto.randomBytes()是可以的。log2(62^22) =~ 130.99)。当然,你总是可以走得更长,对于256位,你需要43的长度和区分大小写的字母数字。发布于 2020-04-19 08:20:03
我认为我们可以生成一对公钥和密钥(私钥),使用下面的code..you可以引用链接以在此处生成密钥对( doc )。链接
var pk="";
var sk="";
var string= payload;
const { generateKeyPair } = require('crypto');
generateKeyPair('rsa', {
modulusLength: 4096,
publicKeyEncoding: {
type: 'spki',
format: 'pem'
},
privateKeyEncoding: {
type: 'pkcs8',
format: 'pem',
cipher: 'aes-256-cbc',
passphrase: 'top secret'
}
}, (err, publicKey, privateKey) => {
try {
pk=publicKey;
sk=privateKey;
} catch (error) {
console.log(err)
}
});现在我们有了秘密密钥和公共key....so,我们可以实现HMAC authentication...ref..请使用hmac身份验证文档
var hmac = crypto.createHmac('sha384', sk).update(string).digest('hex');
request.post({uri:..., json: { hmac, pk, string }, function(err, response, body) {
console.log(body);
});https://stackoverflow.com/questions/55009503
复制相似问题