2012-07-19 94 views
49

我遇到了很多API,它们向用户提供API 密钥秘密。但我的问题是:两者有什么区别?为什么使用API​​密钥和秘密?

在我眼里,一个关键就足够了。说我有一把钥匙,只有我和服务器知道。我用这个键创建一个HMAC哈希值并进行API调用。在服务器上,我们再次创建HMAC散列并将其与发送的散列进行比较。如果相同,则该呼叫被认证。

那么为什么要使用两个键?

编辑:或者是API密钥用于查找API的秘密吗?

回答

24

密钥密码学依赖于使用相同的密钥进行编码,然后再解码消息。因此,只有知道“秘密”的人才能阅读该消息。

RSA安全性基于2个匹配的密钥。每个用户都有一个公钥,每个人都可以(应该)知道它。还有一个只有用户应该知道的私钥。用公钥加密的消息只能用私钥解密,反之亦然。因此,如果我想向您发送只有您可以阅读的消息,我(从网络上)获取您的公钥,使用该密钥加密消息,并且您是唯一可以解密该消息的人。或者,如果我想向您证明我发送了消息,则可以使用我的私钥对消息进行加密,告诉您(在公开文本或其他消息中)如何对其进行加密。然后你可以用我的公钥解密这条消息,如果它变得可读,你就知道它来自我。

这种形式的加密是相当大的计算机密集型,所以有时做的是用RSA技术加密一次性“密钥”,然后用密钥加密其余的消息,然后加密我的签名第二种方式。然后,如果信息和签名是可读的,你就可以改变这个过程,只有你可以阅读它,并确保我发送了信息。

您可以访问此链接以获得更详细的解释。

How do API Keys and Secret Keys work?

感谢。

+3

很好的答案,但是当我使用Facebook的秘密和密钥与Facebook或Gmail等,在任何时候我都不得不加密或散列任何东西。在这些情况下,API的秘密和密钥有什么意义? – Quintonn 2016-07-11 06:55:24

+0

以Facebook为例,有两种情况可以使用app_secret。第一个不需要散列。它主要用于防止重定向url被劫持。在用户登录并授予您的应用访问权限后,如果Facebook将访问令牌直接发送到重定向url,您将无法验证访问令牌是否来自Facebook。我可以将我自己的访问令牌发布到您的重定向url并执行来自您的api的Facebook操作。相反,Facebook发送代码到重定向url。然后api交换实际访问令牌的代码。 – 2017-02-17 05:17:43

+0

在后面的部分中,交换实际访问令牌的代码,facebook希望你的API能够验证它是否具有签名的身份。在这种情况下,他们不需要公钥密码术进行签名,他们只是相信你保持秘密的秘密,并将其用作签名。对我来说,这总是显得很愚蠢,因为我不想继续使用单向函数来生成签名,但是我想他们有理由来解决直接使用应用程序秘密的问题。 – 2017-02-17 05:24:55

32

你需要两个独立的钥匙,一个告诉他们你是谁,另一个证明你是谁,你说你是谁

“密钥”是您的用户ID,“密码”是您的密码。他们只是使用“关键”和“秘密”术语,因为这是他们实施它的方式。

+0

最后一段应该是BOLD – 2016-06-04 12:13:08

+0

如果你通过https进行通信呢?用一些秘密密钥加密你的信息有什么意义? – kamuniaft 2018-01-12 20:09:22

0

答案很简单,如果我理解正确的话......

如果您使用加密的API密钥,如何将服务知道谁在联系他们?他们将如何解密该消息?

您使用API​​密钥来表明您是谁,这是您以纯文本形式发送的内容。 您的秘密钥匙不会发送给任何人。您只需使用它进行加密。然后你发送加密的消息。您不会发送用于加密的密钥,这会破坏目的。

相关问题