释放应用程序后,它可能会进行反向工程。这意味着,如果将相同的应用程序(相同的二进制文件,相同的设置)分发给所有用户,那么您将无可奈何地得到100%的保护。
如果您可以为每个用户自定义应用程序,那么您就有机会不禁止其他应用程序使用您的API,但至少可以通过它可以对API发出的请求数来限制此应用程序。
想象一下以下架构:
- 客户端连接并发送其唯一标识符(用户一个标识符)。
- 服务器通过发送使用公钥加密的质询来答复。该公共密钥与先前发送的唯一标识符相关联。
- 客户端通过使用私钥解密数据来解决挑战,并将解密后的秘密以无格式方式发送回服务器。
- 服务器验证提交的机密是否与最初生成的机密相对应。
能够入侵您的应用程序并成功获取私钥的开发人员将能够从自己的应用程序中使用您的API,但是他将作为您服务器的标识符。
如果同一个用户每天可以向您的API发出1万个请求,并且平均而言,一个活跃用户每天可以发出2 000个请求,则意味着该开发人员可以自己使用其应用程序,也可以将其发送给他的朋友,但是他无法将它卖给成千上万的人,因为它只能在早上工作几分钟。
虽然这样做有帮助,但也不是100%证明。如果黑客在设备上安装了自己的应用程序后找到了从您的应用程序中提取私钥的方法,该怎么办?
附注不回答你的问题,但仍可能是有用的:不要去想一个API作为一个工具,为您的初级产品(移动应用)。可以将其视为一流的产品本身,即可以付费的产品。亚马逊和Google多年来一直使用相同的模型,微软,Azure等也开始积极使用该模型。
一旦您认为API不是作为新的移动应用程序的次要工具而沦为奴隶制,而是与用户实际看到的任何应用程序处于同一水平的实际产品,您便开始思考如何保护API免受侵害。其他应用的使用情况,以及有关API本身的获利的更多信息。此类API可由您的客户应用程序或任何人免费开发的任何其他应用程序使用。这有几个好处:
制作一个仅由您的应用程序使用的API 既困难又昂贵。这段时间和金钱可以用于更有用的事情。
向公众开放您的API可以为您和整个世界带来巨大利益。假设您是一位出色的架构师和一位出色的开发人员,因此您创建了一个非常出色的API,但是您的视觉设计师技能却很糟糕,您对交互设计等一无所知。如果您隐藏了API,那么唯一的人们会知道的是,您已经创建了一个无法使用且丑陋的移动应用程序。如果您的API是公开的,其他开发人员将被其质量吸引,并为其编写出色的应用程序,从而为您带来很多收益。
您从未想象过其他人会如何使用您的API。这就是Kinect发生的情况。最初,微软为游戏创建Kinect。当Microsoft向公众开放该API时,他们从未想到过几年后科学应用程序,卫生部门等会使用该API。WebAPI与此类似:更多的开发人员正在使用它,想法会更加广泛。