android - 如何防止其他 iOS/Android 应用程序使用我的 RESTful API?

标签 android ios security rest

我有一个预先存在的 iOS 和 Android 应用程序,我正在为此进行更新,包括 RESTful 服务 API 和用于用户身份验证的 Facebook 登录。该应用程序的一般流程是:

  1. 用户通过 Facebook 的 SDK“登录”到我的应用,这会将访问 token 返回到我的应用。
  2. 应用程序调用 RESTful 服务,包括作为参数的 Facebook 访问 token (使用 HTTPS 和 SSL)
  3. 被调用的服务将接收到的访问 token (以及仅存储在我的服务器上的应用密码)发送到 Facebook 以验证用户是谁,并根据此执行操作。 Facebook 将要求服务器端调用提供应用程序 secret 。

我的应用程序已经流行起来并且已经有多个克隆,我想阻止这些克隆使用我的 RESTful API(因为我确信他们会在我发布更新时尝试这样做)。让我们假设克隆是智能的,使用与我的应用程序相同的 Facebook 访问 token (如果可能的话),并且遵循与我的应用程序相同的调用 API 的模式和频率。

有没有办法确保或几乎确保对我的服务的调用仅来 self 的应用,而不是克隆应用?

提前致谢!

最佳答案

您可以通过在请求中包含签名并验证它来做到这一点。

应用端:

  1. 做类似的事情:signature = md5( md5(url + data) + MY_RANDOM_KEY)

  2. signature附加到数据,或url等

  3. 向 REST api 发送调用(像往常一样)

服务器端:

  1. 从正文/url 中提取签名(并从那里删除它)。

  2. 计算你认为它应该是什么:signature_should_be = md5( md5(url + data) + MY_RANDOM_KEY) [记住你已经删除了signature从 url/data 获取原始哈希前状态的 url/data]

  3. 验证signaturesignature_should_be是否相等

这样做,连同 SSL,应该可以使您的 API 足够安全。

关于android - 如何防止其他 iOS/Android 应用程序使用我的 RESTful API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22774584/

相关文章:

php - 我应该允许 2 个字符的密码吗?

类中的Android Gesture Detection,调用方法

ios - 如何从非初始 NavigationController 场景开始

java - 对 Applet/Webstart 添加较低的限制

c# - 如何在 ios xamarin 的文本字段中禁用空格字符

ios - NSSortDescriptor 中文...怎么样?

java - Spring安全角色分配

java - 如何循环播放多个图像的淡入和淡出动画?

java - 如何根据您所在的 Activity 从 CustomAdapter 隐藏元素?

android - 如何在android中获取准确的当前移动时间?