我有一个预先存在的iOS和Android应用程序,我正在进行更新,其中包括RESTful服务API和用于身份验证的Facebook登录.该应用程序的一般流程是:
用户通过Facebook的SDK"登录"到我的应用程序,该SDK将访问令牌返回到我的应用程序.
App调用RESTful服务,包括Facebook访问令牌作为参数(使用HTTPS和SSL)
被呼叫的服务将收到的访问令牌(以及仅存储在我的服务器上的应用程序秘密)发送到Facebook以验证用户是谁,并根据该操作执行操作.Facebook设置为从服务器端调用需要app secret.
我的应用已经普及并且已经有几个克隆,我想阻止这些克隆能够使用我的RESTful API(因为我确信他们会在我发布更新时尝试做).让我们假设克隆是聪明的,使用与我的应用程序相同的Facebook访问权限(如果可能的话),并遵循类似的模式和频率调用我的应用程序所做的API.
无论如何,确保或几乎确保我的服务的呼叫只来自我的应用程序,而不是克隆?
提前致谢!
您可以通过在请求中包含签名并进行验证来完成此操作.
应用方:
做类似的事情: signature = md5( md5(url + data) + MY_RANDOM_KEY)
附加signature
到数据或网址等
发送呼叫到REST api(像往常一样)
服务器端:
signature
从body/url中提取(并从那里删除).
计算你认为它应该是什么:signature_should_be = md5( md5(url + data) + MY_RANDOM_KEY)
[记住你已经signature
从url/data中删除,以便你获得其原始预哈希状态的url/data]
验证signature
并且signature_should_be
相等
这样做以及SSL应该使您的API足够安全.