如何保护私有REST API

时间:2010-10-10 17:47:34

标签: api rest interface distributed soa

我目前正在考虑如何保护仅由我的移动应用程序使用的REST API被其他应用程序使用? API密钥可以是一个很好的解决方案,因为只有我知道秘密的API密钥。 有更好的解决方案吗?

2 个答案:

答案 0 :(得分:17)

Leon,你一直提到“其他人将我的API与其他应用程序一起使用”。那么,您希望将API绑定为仅由一个应用程序使用吗?因此,您不希望为用户提供访问权限,而是希望将其提供给在用户移动设备上运行的应用程序实例。

本质上:你不信任用户!

那么,在这种情况下,您需要确保您的应用程序是封闭源代码,需要将您的凭据编码到您的应用程序中,以便任何人都无法检索它们或以特殊加密方式在设备上存储凭据,解密密钥只能由您的应用程序读取。在某种程度上,您需要实施一种DRM形式,以防止人们在移动设备上处理数据。你需要希望没人能对它进行逆向工程。

如果您的应用程序变得流行/有趣,请依靠这样一个事实:非常非常擅长此类事情的人会查看您的应用程序并在您知道之前破坏加密。也许,如果你像Skype一样付出相同的努力,那么你可能会暂时搁置一段时间。

但问问自己:为什么要打扰?为什么我不信任我的用户?是否真的值得跳过这样的箍来阻止其他应用程序使用我的API?

只需引导您的用户完成注册过程,其中每个应用实例从服务器获取唯一密钥(或唯一的HTTP身份验证密码),并将其存储在用户移动设备上的某个位置。然后,要访问API中的有趣功能,需要存在此密钥/密码。但是当你在本地存储密钥时,不要经过极端的长度来混淆或加密密钥,这是不值得的。如果您以后每次都检测到滥用行为,您始终可以撤消服务器上特定帐户的访问权限。

答案 1 :(得分:2)

使用HTTP身份验证。 REST就是使用HTTP中可用的工具,因此应该使用本机HTTP身份验证。使用基本身份验证,您必须使用HTTPS。如果你不能这样做,请使用HTTP摘要身份验证或NTLM。

所有这些都有不同的优点和缺点,并非HTTP服务器和客户端库都不支持它们中的每一个。