我一直在使用API,并且一直想知道为什么您必须使用密钥和机密?
为什么需要两种身份验证?
服务器收到API调用时,需要知道两件事:谁在进行调用以及该调用是否合法。
如果您只有一个项目(“键”),并且在每次通话中都包含了该项目,则它将回答这两个问题。服务器根据“密钥”知道您是谁,并且因为只有您知道密钥,它才能证明呼叫实际上是您发出的。但是在每次通话中都包含密钥是不安全的做法:如果有人甚至在传输过程中也可以阅读您的一条消息,则您的密钥已被盗用,并且有人可以假装是您。因此,除非您使用HTTPS,否则此方法将无效。
相反,您可以在每个呼叫中都包含一个数字签名,并使用一些“秘密”号码进行签名。(“秘密”号码本身不会发送)。如果攻击者设法阅读了您的消息,他们将无法从签名中找出此“秘密”号码。(这是数字签名的工作方式:它们是单向的)。
但这并不能解决识别问题:在后一种情况下,服务器如何知道谁在拨打电话?它可以尝试针对每个用户的“秘密”来验证签名,但是当然这将非常耗时。
因此,我们要做的是:发送“密钥”(标识用户)和使用“秘密”数字创建的签名(证明消息是合法的)。服务器根据密钥查找用户,然后使用该用户的“秘密”号码验证签名。
这有点像写支票时的样子:它上面有一个帐号(用于识别您的身份)和您的签名(用于证明您是您的身份)。仅拥有帐号并不能证明您确实写了支票。仅具有签名但没有帐号的签名将迫使银行将您的支票与所有账户的签名进行比较,这显然效率很低。
我遇到了许多API,它们为用户提供了一个API密钥和一个秘密。但我的问题是:两者之间有什么区别? 在我看来,一把钥匙就足够了。假设我有钥匙,只有我和服务器知道。我用这个键创建了一个HMAC哈希,并进行了一个API调用。在服务器上,我们再次创建HMAC哈希,并将其与发送的哈希进行比较。如果是相同的,则呼叫经过身份验证。 那为什么要用两把钥匙呢? 编辑:或者该API密钥用于查找API机密?
面向公共的服务需要api密钥。 “专用”服务只能接受来自群集内部的呼叫,而不能接受外部世界的呼叫。 每个api都标识一个用户,并且用户对象必须可用于rest服务。 在一个JAX-RS应用程序中有什么标准的方法可以做到这一点吗?(我们用的是resteasy。) 我读过关于过滤器、拦截器和基本身份验证的所有内容,但我不清楚什么是最好的方法。
问题内容: 我正在用TastyPie制作内部API。我有 禁用身份验证规则后,我的API效果很好。启用它后,无论尝试如何,都会收到401(未经授权)的响应。 我敢肯定,一旦你看到它的实际作用,这就是其中的一件事,但与此同时,请告知如何提出请求(GET)。 问题答案: 将用户名和api_key参数添加到你的GET变量中。确保你拥有 设置时,请确保遵循docs的其他说明: ApiKey身份验证 作为要
我有一个需要以两种不同方式保护的API: 1) 对除1以外的所有请求URL使用JWT,该URL需要使用基本身份验证进行保护 2) 一个url的基本身份验证。 我已经为JWT和Basic Auth设置了安全配置。我的问题是,当我使用有效的用户名和密码请求基本的经过身份验证的URL时,它会成功地对我进行身份验证,并将数据存储在cassandra中。 然后,我希望必须通过/api/login为所有其他请
我正在从https://docs.AWS.amazon.com/cli/latest/reference/kms/encrypt.html和https://docs.AWS.amazon.com/cli/latest/reference/kms/decrypt.html读取AWS加密cli文档。我发现我可以在不创建数据密钥的情况下加密/解密。当我阅读https://docs.aws.amazon.