繁体   English   中英

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

[英]How can I prevent other iOS/Android apps from using my RESTful API?

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

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

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

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

提前致谢!

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

应用方:

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

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

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

服务器端:

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

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

  3. 验证signaturesignature_should_be是否相等

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

你可以这样做,因为Tommy Crush建议并在你的应用程序中添加一个秘密。 但如果你对抗聪明的对手,这可能无济于事。 攻击者可以反编译您的应用程序,也可以尝试简单地对您的签名算法进行逆向工程。

重要的是要记住,应用程序中存储的任何内容都应该被视为已经被泄露,因为攻击者可以反编译您的应用程序并尽可能多地搜索您的代码并从中提取他/她想要的任何内容。 您不能依赖应用程序中的任何内容来保护您的应用程序,因为攻击者可以将其从您的应用程序中提取到他们的应用程序中。

请务必注意,您正在尝试使用OAuth进行身份验证,但不适用于此身份验证。 它仅用于授权,与身份验证不同。 授权只是让您访问资源,但不告诉您访问它的人,这是您面临的问题。 要将您的用户作为真实用户进行身份验证(或尽可能接近),您需要为您的服务添加登录服务 - 例如滚动您自己的OAuth服务器或类似服务。 然后你可以决定谁可以访问资源,在这种情况下是你的RESTful API :)如果这比它的价值更多的工作,那么Tommy的计划是一个很好的选择:)

在Twitter和Facebook使用的其他API上进行身份验证的事实上的解决方案是OAuth机制。 您可以在此处找到更多详细信息: http//en.wikipedia.org/wiki/OAuth

大多数语言都支持OAuth和外部库。 例如,在Android上有https://github.com/wuman/android-oauth-client库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM