api - 如何保护私有(private) REST API

标签 api rest interface distributed soa

我目前正在考虑如何保护仅由我的移动应用程序使用的 REST API 不被其他应用程序使用?
API-Key 能否成为一个好的解决方案,因为只有我知道 API key 。
有更好的解决方案吗?

最佳答案

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

本质上:你不信任用户!

好吧,在这种情况下,您需要确保您的应用程序是封闭源代码,需要将您的凭据编码到您的应用程序中,这样没有人可以检索它们或在设备上以特别加密的方式存储它的凭据,解密键,因为它只能由您的应用程序读取。在某种程度上,您需要实现一种 DRM 形式来防止人们在他们的移动设备上处理数据。你需要希望没有人可以对其进行逆向工程。

如果您的应用程序变得足够流行/有趣,请指望那些非常非常擅长此类事情的人会查看您的应用程序并在您知道之前破解您的加密。也许,如果你像 Skype 一样付出同样多的努力,也许你可以暂时避开它们。

但问问自己:为什么要打扰?为什么我不信任我的用户?像这样跳过障碍以防止其他应用程序使用我的 API 真的值得吗?

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

关于api - 如何保护私有(private) REST API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3901402/

相关文章:

arrays - 如何快速解析字符串数组?

api - 通过彭博数据许可证验证 OCC 期权符号

JSON 到 Excel 的转换,通过使用 go lang 映射数据结构不会每次都产生相同的输出

iOS 关闭 iPad 屏幕

database - 我可以在 Android 上为我自己的应用程序使用谷歌地图数据吗?

java - 如何使用 Spring 设置 RESTful API 以使用 Controller 和模型发送 JSON 响应

android - 是否有用于读取血压数据的 Google Fit REST API?

python - 放心等同于 Python for Rest API 自动化测试

java - 为什么当默认方法被子类的静态方法覆盖时,Java 8编译失败?

C# 接口(interface)强制属性是另一个接口(interface)?