首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >识别移动应用

识别移动应用
EN

Stack Overflow用户
提问于 2013-02-17 22:52:03
回答 3查看 1.3K关注 0票数 2

可以识别(验证)移动应用程序的HTTP请求吗?例如,来自web服务器的请求可以由域或IP标识,假设我知道该请求应该来自何处,我可以接受该请求,如果该请求来自意外来源,则可以拒绝该请求。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-17 23:26:59

如果您需要从移动应用(原生编译的应用)进行安全的HTTP调用(webservice API),您可以尝试以下方法:

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

  1. 假设您正在实现应用程序,请在代码中保存某种类型的秘密API密钥。
  2. 当应用程序通过HTTP进行API调用时,将始终使用HTTPS (因此一切都是)。
  3. 服务器将通过检查密钥是否正确来进行身份验证。

嗅探应用程序流量不会泄露密钥(因为HTTPS)。

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

如果不更多地了解您的具体问题,就很难提出替代方法。如果您正在寻找不同的东西,请提供更多详细信息。

票数 3
EN

Stack Overflow用户

发布于 2015-08-05 17:36:36

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

  • HTTP基本身份验证:对于API服务的技术作者和使用它们的开发人员来说,这个过程都很简单:

开发者会得到一个API密钥(通常是ID和Secret)。此API密钥通常如下所示: 3bb743bbd45d4eb8ae31e16b9f83c9ba:ffb7d6369eb84580ad2e52ca3fc06c9d.

他负责将API密钥存储在他们的服务器上的安全位置,这样任何人都无法访问它。他通过在HTTP Authorization报头中提供API密钥和单词“Basic”( API服务器使用它来正确解码授权凭证)来向API服务发出API请求。密钥也是Base64编码的。

例如,关键字可以是: 3bb743bbd45d4eb8ae31e16b9f83c9ba:ffb7d6369eb84580ad2e52ca3fc06c9d

以M2JiNzQzYmJkNDVkNGViOGFlMzFlMTZiOWY4M2M5YmE6ZmZiN2Q2MzY5ZWI4NDU4MGFkMmU1MmNhM2ZjMDZjOWQ=.格式编码:base64

API服务器反转这一过程。当它找到HTTP Authorization头部时,它会解码base64结果,读取接口密钥ID和Secret,并在允许处理请求之前对这些tokens进行验证。

HTTP基本身份验证很简单,但对于移动应用程序来说,保护API密钥是一个主要问题。HTTP基本身份验证要求通过线路为每个请求发送原始API密钥,从而增加了长期误用的可能性。此外,这是不切实际的,因为您不能安全地将API密钥嵌入到分发给许多用户的移动应用程序中。

例如,如果您构建了一个嵌入了API密钥的移动应用程序,用户可能会对您的应用程序进行反向工程,暴露此API密钥,并滥用您的服务。

因此,HTTP基本身份验证在web浏览器和移动应用程序等开放环境中存在风险。

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

移动应用编程接口安全的

  • OAuth2:

OAuth2是一个很好的协议,用于保护来自开放设备的API服务,并提供了一种通过令牌authentication.对移动用户进行身份验证的更好的方法。

OAuth2令牌身份验证从用户角度工作(OAuth2命名为密码授予流):

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

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

根据所使用的移动平台来存储令牌。对于安卓应用程序,访问令牌可以存储在共享首选项中,对于iOS应用程序,可以存储在钥匙链中。

票数 3
EN

Stack Overflow用户

发布于 2013-02-17 22:57:27

这取决于你如何定义“移动应用”。是否有应用程序在移动设备上运行?在移动设备上运行Web浏览?移动设备对您来说是什么?

总之,简而言之,您可以使用HTTP标头中发送的User-Agent来检测设备类型。所有流行的移动浏览器都会发送此消息。但请注意,请注意:

  • 它可以被欺骗(很容易)
  • 一些应用程序(即iPhone或安卓应用程序和类似的)可以这样写,他们不会发送用户代理与超文本传输协议的请求。最佳实践要求发送用户代理。

我不知道有什么更可靠的方法可以做到这一点;而且,只要事情通过HTTP发生,通常就没有任何方法可以确切地了解客户端的任何信息。对于大多数用例,您可以查看User-Agent。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14922321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档