Rest API身份验证方法-我做得正确吗?
我对构建API身份验证非常陌生,所以我想确保我的做法是正确的,因为可能存在我不知道的重大安全缺陷 它基于一个秘密/私钥对,客户机和服务器都知道这个秘密密钥,但显然它从来没有被传递过 对于此方法中的任何反馈、见解或漏洞,我们将不胜感激Rest API身份验证方法-我做得正确吗?,rest,authentication,authorization,private-key,public-key,Rest,Authentication,Authorization,Private Key,Public Key,我对构建API身份验证非常陌生,所以我想确保我的做法是正确的,因为可能存在我不知道的重大安全缺陷 它基于一个秘密/私钥对,客户机和服务器都知道这个秘密密钥,但显然它从来没有被传递过 对于此方法中的任何反馈、见解或漏洞,我们将不胜感激 第1步: 客户机希望向API发出请求,因此请求服务器提供一个nonce,传递他们的公钥 第二步: 服务器查找用户私钥(使用提供的公钥)并使用随机32字符字符串(nonce)对其进行散列(sha256) 散列后的nonce和公钥随后存储到本地数组中 然后,服务
第1步:
客户机希望向API发出请求,因此请求服务器提供一个nonce,传递他们的公钥
第二步:
服务器查找用户私钥(使用提供的公钥)并使用随机32字符字符串(nonce)对其进行散列(sha256) 散列后的nonce和公钥随后存储到本地数组中 然后,服务器使用nonce的非散列版本响应客户机
第三步:
客户端从响应中获取nonce,并使用其私钥(客户端在本地拥有)对其进行散列 然后,它向服务器发出请求(以及它想要执行的API任务),并发送其哈希nonce和公钥的版本
第4步:
服务器获取客户端公钥和散列nonce,然后检查本地数组以查看公钥/nonce对是否存在
如果该对存在;身份验证已通过,请求被允许,公钥/nonce对已从本地阵列中删除。首先,让我说我在安全世界中没有任何凭据。请对我所说的一切持保留态度 一些一般性的想法 似乎你想自己动手,这在任何安全相关领域都是一个坏主意。当野外有几种经过战斗考验的替代品时,情况更是如此 我可以毫不夸张地说出三种广泛使用的API身份验证方法:
谢谢你的回复-你提出了一些我没有考虑的观点。我会详细地看一下你提到的HMAC方法,因为它看起来和我要找的最接近。如果答案有用,请考虑投票和/或接受它。谢谢没有足够的代表投票-但接受了答案,因为它的帮助!