tangguo

在使用大多数API时,为什么它们需要两种身份验证类型,即密钥和密钥?

api

我一直在使用API​​,并且一直想知道为什么您必须使用密钥和机密?

为什么需要两种身份验证?


阅读 234

收藏
2020-10-22

共1个答案

小编典典

服务器收到API调用时,需要知道两件事:谁在进行调用以及该调用是否合法。

如果您只有一个项目(“键”),并且在每次通话中都包含了该项目,则它将回答这两个问题。服务器根据“密钥”知道您是谁,并且因为只有您知道密钥,它才能证明呼叫实际上是您发出的。但是在每次通话中都包含密钥是不安全的做法:如果有人甚至在传输过程中也可以阅读您的一条消息,则您的密钥已被盗用,并且有人可以假装是您。因此,除非您使用HTTPS,否则此方法将无效。

相反,您可以在每个呼叫中​​都包含一个数字签名,并使用一些“秘密”号码进行签名。(“秘密”号码本身不会发送)。如果攻击者设法阅读了您的消息,他们将无法从签名中找出此“秘密”号码。(这是数字签名的工作方式:它们是单向的)。

但这并不能解决识别问题:在后一种情况下,服务器如何知道谁在拨打电话?它可以尝试针对每个用户的“秘密”来验证签名,但是当然这将非常耗时。

因此,我们要做的是:发送“密钥”(标识用户)和使用“秘密”数字创建的签名(证明消息是合法的)。服务器根据密钥查找用户,然后使用该用户的“秘密”号码验证签名。

这有点像写支票时的样子:它上面有一个帐号(用于识别您的身份)和您的签名(用于证明您是您的身份)。仅拥有帐号并不能证明您确实写了支票。仅具有签名但没有帐号的签名将迫使银行将您的支票与所有账户的签名进行比较,这显然效率很低。

2020-10-22