我们正在开发一个REST API,供几个移动应用程序使用。重要的是我们能够信任这些移动应用程序的身份。在我们当前的设计中,每个API调用都使用“API Key”参数进行身份验证,并使用HTTPS进行保护。
我担心的是,API Key嵌入在移动应用程序的每个副本中,这意味着我们无法保密。它将在成千上万的手机上,理论上任何拥有二进制编辑器或HTTP流量分析器的黑客都可以提取API密钥,然后“冒充”其中一个应用程序,向我们发送请求,我们别无选择,只能信任。客户证书似乎具有相同的风险。
是否有解决此问题的架构?
答案 0 :(得分:3)
不时在包括StackOverflow在内的不同地方讨论它。简而言之 - 无论你给用户拥有什么,都不再是你的了。当然,您可以对私钥进行模糊处理,但我发现至少有三种方法可以绕过您的安全措施。
解决问题的唯一方法可能是使用加密设备(智能卡或USB加密密钥)来保存私钥和密钥并且不会让它们出来,但是对于手持设备使用此类设备非常复杂(如果不是不可能的话) )从技术和可用性的角度来看。
此外,您可能需要重新考虑您的方法,并让任何客户端软件使用该服务,因为他们付费。您的服务器将验证用户而不是软件。然后保密登录数据的主题将是用户的任务。