如何确保API请求来自我们的移动(iOS / Android)应用程序?

我们正在构build一个移动应用程序,并希望实施某种身份validation,以确保API只被我们的应用程序访问。 该应用程序的用户是匿名的,没有login,但我确实通过设备标识来维护设置等。

最简单的方法似乎是生成一个Guid / API密钥,我通过SSL发送每个请求。

令我担心的是,有很多空闲时间的恶意人可能会下载应用程序,反编译得到API密钥和JSON请求,然后尽可能地垃圾我的数据库。

SSL,一个API密钥,一个设备ID和一个尽可能受约束的API调用是否足够好? 我应该采取不同的方法? 我的恐惧是成立的还是毫无根据的?

不要在应用程序中embedded单个API密钥。 您的担心是有效的恶意用户的影响。 此外,您目前的设置中存在一个严重的漏洞,您可能会通过提供伪造的UDID,让恶意API用户更改其他用户的首选项。

相反,创build一个“注册”服务,在设备上首次启动应用程序时调用,该设备将生成并返回基于UDID的GUID。 将GUID存储在设备本地用户首选项和服务器上。 跟踪您的服务器上的每个请求的GUID并将其与UDID进行匹配。

确保所有这些都是通过SSL进行的。

采用这种方法,没有embedded的主API密钥被滥用。 此外,您可以通过标记GUID / UDID组合来将滥用用户列入黑名单,并且还可以消除现有注册设备潜在的伪装问题。 但是,您无法防止恶意注册尚未在您的服务中注册的设备。 这将永远是使用设备ID作为用户标识符的潜在危险。

还有更好更成熟的authentication机制采取更好的方法,即。 OAuth,JSessionIDs等,你应该看看。

此外,将来您不应该使用UDID来标识您的用户,因为对其的访问已被弃用。 您可以通过在应用程序安装时在设备上创build自定义设备GUID并将其保存在本地用户首选项中来模拟UDID。