Iv'e移动了这个,因为它更多的是一个设计问题,而不是代码问题。
在许多应用中,第三方网站/程序可以通过密钥访问网站。
例如,web应用程序宿主应用程序,每个应用程序都有一个唯一的API键。这些密钥被分发给不同的开发人员,以确保他们不会根据合同提出太多的请求。
然而,第三方申请通常以下列形式提出请求:
http://www.thewebapplication.com/my.api?key=TheKey\rmeter=SomeValue
这些都可以从无数的技术(吹奏者,交通窥探者)中看到。更糟糕的是,这些请求可能被放在Javascript中并提供给每个人。如何设计有助于保护客户端API密钥的API系统?
发布于 2014-03-18 12:13:56
不需要实际的密钥,而是需要只有密钥所有者才能提供的东西,但不公开实际的密钥值。
通常的解决方案不是键,而是key+something任意项上单向哈希函数的值。例如,开发人员可以生成一个不超过一次的值(从未超过一次发送的值),将其与键组合在一起,散列结果,然后发送合并的散列+当前值,而不是键。然后,您的应用程序必须检查哈希是否正确,并且在此之前没有使用nonce值(并且没有达到服务限制)。这允许客户端提出他们想要的多少请求(在他们的合同中),但是拦截器不能窃取凭据来从合同中窃取服务。
https://softwareengineering.stackexchange.com/questions/232788
复制相似问题