如何限制对移动应用程序的HTTP API的访问?

时间:2012-04-05 09:32:10

标签: security api authorization

我目前正在为在线服务开发API。 我想为移动和Web开发人员提供访问权限来创建他们的应用程序。 开发人员将对其应用程序具有通常的数量要求/分钟限制。

验证应用程序的最佳做法是什么?

对于Web应用程序,它很容易。我们提供令牌,令牌对域名有效,所以即使有人试图在其他任何地方使用它也会失败。

如何为移动应用程序做到这一点? 我们可以提供令牌。这种令牌需要与设备上的应用程序一起分发 并且意味着有人会嗅到该令牌,他可以编写另一个将使用相同令牌的应用程序。这意味着原始用户必须撤销旧令牌,创建新令牌并发布新版本(他的用户必须再次下载)。

你知道任何解决方案吗?

1 个答案:

答案 0 :(得分:0)

我不确定您的开发人员是否能够安全地执行此操作,而无需与他们自己的主机和系统上的某种形式的用户帐户进行某种形式的通信。正如您所说,如果您在应用程序中包含一个长期存在的令牌,无论进行何种混淆,最终都可以通过逆向工程技术发现它。

我可以看到两个选项:

1。短命令牌

在此方案中,移动应用程序联系开发人员的系统以接收短的身份验证令牌。 在注册期间以及此后定期,开发人员生成公私密钥对并为您提供公钥。

每个身份验证令牌都需要包含某种未加密的“开发者密钥ID”和加密的数据位,包括令牌的发布数据和伪随机数据的盐。开发人员的主机将使用公钥 - 私钥对中的私钥加密数据。这将秘密保存在受控且安全的空间中。加密数据需要包含salt,以防止开发人员密钥known-plaintext attacks

应用程序将令牌发送给您,您可以通过以下方式确定其合法性:

  1. 使用未加密的开发人员密钥ID来确定在解密加密字符串时使用哪个密钥。
  2. 开发者密钥ID是否已被撤销或过期? (由于密钥泄露,dev API订阅到期或滥用等)。如果它被撤销,则拒绝访问。
  3. 令牌中的加密数据是否正确解密?如果没有,拒绝访问。
  4. 令牌是否已过期? (基于加密的令牌日期)如果是这样,请告诉客户端从开发服务器获取新令牌。他们的软件应在联系您的API之前执行此操作,但您必须检查以防万一。我建议允许令牌生存相对较短的时间,因为在应用程序之间复制令牌是一个弱点。
  5. 允许访问
  6. 您也可以使用对称加密而不是公钥 - 私钥加密,但是您和开发人员都知道这个秘密。如果只有开发者知道它,它会更安全。

    2。通过开发主机

    传递API调用

    移动应用程序可以与开发人员的主机而非主机通信,以便调用API。当开发主机接收到其中一个呼叫时,它只是将呼叫传递给您的API并添加其秘密令牌。