2013-02-17 61 views
2

是否可以识别(验证)移动应用程序HTTP请求? 例如,来自网络服务器的请求可以由域或IP标识,假设我知道它应该从哪里来,我可以接受请求或否认它是否来自意外源。识别移动应用程序

doe的移动应用程序有某种独特的id(不能被模仿)?

回答

2

如果你需要从移动应用安全的HTTP调用(Web服务API)(本机编译应用程序),你可以试试下面的办法:

编辑:这种方法假定你不能依靠用户操作应用程序进行身份验证的目的(因为您可以简单地要求用户在应用程序中输入安全密码)。

  1. 假设您正在实施该应用程序,请在代码中保存某种秘密API密钥。

  2. 当应用程序通过HTTP进行API调用时,它将始终使用HTTPS完成(因此所有内容都被加密)。

  3. 该应用将发送秘密API密钥作为URL参数。

  4. 服务器将通过检查密钥是否正确进行验证。

嗅探应用流量不会泄露密钥(由于HTTPS)。

你大多容易受到某人逆向工程你的应用程序发现里面的秘密密钥。这可以通过使用各种混淆和反调试技术而变得困难,但不能做成真正不可能的。只要你使用的是一种编译语言(比如Objective-C,而不是JS),没有任何特殊的游戏,这已经很难了。如果您避免将API密钥字符串按原样放置并在应用程序中使用一些简短的代码进行计算,那么您已经使其发现的难度增加了大约1000倍。

不知道更多关于您的具体问题,很难建议替代方法。如果您正在寻找不同的东西,请提供更多详情。

+0

我实际上需要验证Web客户端和移动客户端。 Web客户端使用JavaScript,所以很容易获得密钥,但是您的解决方案对于移动客户端来说可以很好地工作。所以如果我确定客户端类型,我可以通过不同的方式进行身份验证。谢谢! – 2013-02-17 15:37:26

+0

这个问题并没有真正的解决方案。由于你的应用程序是公开给任何人的(特别是如果它是JS的话),你无法真正区分你的应用程序和可以完全访问你的源代码的冒名顶替者。 – talkol 2013-02-17 15:42:04

2

这取决于您如何定义“移动应用程序”。任何在移动设备上运行的应用程序?在移动设备上运行网页浏览?什么是移动设备?

无论如何,一般的简短答案是,您可以使用HTTP标头中发送的User-Agent来检测设备类型。所有流行的移动浏览器发送这个。但要知道,那:

  • 可以(容易)
  • 某些应用程序(如iPhone或Android应用程序和类似)可以写成这样一种方式,他们不发送用户代理欺骗与HTTP请求。最佳做法授权发送用户代理。

我不知道更可靠的方法来做到这一点;只要通过HTTP发生事件,通常不会有任何方法可以确切地了解客户端的任何信息。对于大多数用例来说,通过查看用户代理,您将会完好无损。

您可以购买包含各种设备数据(如果适用)的用户代理数据库,其中两个数据库是WURFLDeviceAtlas

2

在实践中有两种方法。 HTTP基本身份验证(对于移动应用程序不太安全)和OAuth2(与HTTP基本身份验证相比,安全)。

  • HTTP基本身份验证:过程很简单的的API服务,无论是技术作家,也是开发者使用它们:

开发者给出的API密钥(通常是一个ID和密码) 。此API密钥通常如下所示:3bb743bbd45d4eb8ae31e16b9f83c9ba:ffb7d6369eb84580ad2e52ca3fc06c9d。

他负责将API密钥存储在其服务器的安全位置,以便任何人都无法访问它。他通过在HTTP授权标头中提供API密钥以及“基本”(由API服务器用于正确解码授权凭证)这个词来向API服务发出API请求。密钥也是Base64编码的。

例如键可以是:3bb743bbd45d4eb8ae31e16b9f83c9ba:ffb7d6369eb84580ad2e52ca3fc06c9d

在base64编码:M2JiNzQzYmJkNDVkNGViOGFlMzFlMTZiOWY4M2M5YmE6ZmZiN2Q2MzY5ZWI4NDU4MGFkMmU1MmNhM2ZjMDZjOWQ =。

API服务器反转这个过程。当它找到HTTP授权标头时,它将解码base64结果,读取API密钥ID和Secret并在允许处理请求之前验证这些标记。

HTTP基本认证很简单,但对于保护API密钥的移动应用程序是一个主要关注点。 HTTP基本身份验证要求每个请求都通过线路发送原始API密钥,从而增加长期滥用的可能性。 由于您无法安全地将API密钥嵌入到分发给许多用户的移动应用程序中,因此它也不切实际。例如,如果您构建了一个嵌入了API密钥的移动应用程序,则用户可以对您的应用程序进行逆向工程,暴露此API密钥并滥用您的服务。

因此,HTTP基本认证在开放环境中有风险,如Web浏览器和移动应用程序。

注意:与所有身份验证协议一样,HTTP基本身份验证必须始终通过SSL使用。

  • OAuth2以移动API安全:

    的OAuth2是从开放设备确保API服务优良的协议,并提供了一个更好的方式通过令牌身份验证来验证移动用户。

的OAuth2令牌认证从用户的角度(OAuth2用户名密码就批流程)工作原理:

当用户启动移动应用他提示输入用户名或电子邮件地址和密码。 开发人员通过包含登录数据(通过SSL)向应用程序发送POST请求至API服务。然后验证用户凭证,并为用户创建一段时间后过期的访问令牌。此访问令牌可以存储在移动设备上,将其视为允许访问API服务的API密钥。当访问令牌过期时,用户会再次提示登录详细信息。

OAuth2生成的访问令牌可以临时存储在开放环境中,并且是安全的。它是安全的,因为访问令牌是为临时目的而生成的,并且可以减少潜在的破坏。

令牌根据所使用的移动平台进行存储。对于Android应用,访问令牌可以存储在共享首选项和iOS应用中的Keychain中。