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

use*_*090 6 security rest android ios

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

  1. 用户通过Facebook的SDK"登录"到我的应用程序,该SDK将访问令牌返回到我的应用程序.
  2. App调用RESTful服务,包括Facebook访问令牌作为参数(使用HTTPS和SSL)
  3. 被呼叫的服务将收到的访问令牌(以及仅存储在我的服务器上的应用程序秘密)发送到Facebook以验证用户是谁,并根据该操作执行操作.Facebook设置为从服务器端调用需要app secret.

我的应用已经普及并且已经有几个克隆,我想阻止这些克隆能够使用我的RESTful API(因为我确信他们会在我发布更新时尝试做).让我们假设克隆是聪明的,使用与我的应用程序相同的Facebook访问权限(如果可能的话),并遵循类似的模式和频率调用我的应用程序所做的API.

无论如何,确保或几乎确保我的服务的呼叫只来自我的应用程序,而不是克隆?

提前致谢!

Tom*_*ush 6

您可以通过在请求中包含签名并进行验证来完成此操作.

应用方:

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

  2. 附加signature到数据或网址等

  3. 发送呼叫到REST api(像往常一样)

服务器端:

  1. signature从body/url中提取(并从那里删除).

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

  3. 验证signature并且signature_should_be相等

这样做以及SSL应该使您的API足够安全.

  • 我对使用这种方法的担心是,克隆可以对我的应用程序进行逆向工程,看看我在这里做了什么.如果克隆也使用了signature = md5(md5(url + data)+ MY_RANDOM_KEY),如我的应用程序中所示,那么这将如何使其安全?另外,我认为MD5已经过时了一段时间了. (4认同)