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

我有一个预先存在的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)
>将签名附加到数据或网址等.
>发送呼叫到REST api(像往常一样)

服务器端:

>从body / url中提取签名(并从中删除).
>计算你认为它应该是什么:signature_should_be = md5(md5(url data)MY_RANDOM_KEY)[请记住你已经从url / data中删除了签名,这样你就可以获得原始预哈希状态的url / data]
>验证签名和signature_should_be是否相等

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

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...