2

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

验证应用程序的最佳实践是什么?

对于 Web 应用程序来说,这很容易。我们提供令牌,令牌对域有效,因此即使有人尝试在其他任何地方使用它也会失败。

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

你知道有什么解决办法吗?

4

1 回答 1

0

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

我可以看到 2 个选项:

1. 短命代币

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

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

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

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

您也可以使用对称加密而不是公私钥加密,但是您和开发人员都知道这个秘密。如果只有开发人员知道它会更安全。

2.通过开发主机传递API调用

移动应用程序可能会与其开发人员的主机而不是您的主机交谈以调用 API。当开发主机收到其中一个调用时,它只是将调用传递给您的 API 并添加其秘密令牌。

于 2012-05-14T02:51:53.073 回答