如何保护私有REST API

Leo*_*onS 13 api rest soa distributed interface

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

jbr*_*del 17

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

实质上:你不信任用户!

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

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

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

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


Sve*_*ven 2

使用 HTTP 身份验证。REST 就是使用 HTTP 中提供的功能,因此应使用本机 HTTP 身份验证。不过,使用基本身份验证时,您\xe2\x80\x99 必须使用 HTTPS。如果您无法做到这一点,请使用 HTTP 摘要身份验证或 NTLM。

\n\n

它们都有不同的优点和缺点,并且并非每一种都可以得到您的 HTTP 服务器和客户端库的支持。

\n

  • 这个答案如何保护第三方应用程序对 API 的访问?此答案解决了如何验证特定凭据对 API 的访问。它没有解决如何隐藏这些凭据(如果它们是特定于客户端应用程序(而不是特定于用户))的问题。jbrednel 下面的答案更有帮助,并且更直接地回答了我的问题。 (18认同)