将REST API限制为仅限移动应用程序 - 建议的方法

时间:2018-04-24 22:23:20

标签: rest api security authentication key

我读了很多,你可以将你的公共REST API仅限于你的移动应用程序,但我有一个想法,我想要它的意见:

可变应用密钥方法

移动应用

  1. 获取当前连接的IP地址
  2. 使用秘密算法从IP地址生成散列的AppKey。
  3. 发送每个API请求的AppKey
  4. 服务器端

    1. 检查传入请求的IP地址
    2. 使用相同的秘密算法从该IP地址生成AuthKey。
    3. 将AuthKey与AppKey进行比较,如果匹配,那么您就知道了 应用程序正在与您交谈,因为只有应用程序知道 秘密算法。
    4. 当IP地址发生变化时:

      • 在移动应用上使用新IP地址重新生成AppKey
      • 服务器端将始终生成相同的密钥,因为它取决于 请求的IP地址

      这样做的主要优点是AppKey将始终更改,这比在代码中硬编码1个应用程序密钥更好,这可以通过读取请求标头轻松窃取。即使您从用户那里偷走了AppKey,您也必须使用生成该密钥的相同IP地址。

      有什么想法吗?

1 个答案:

答案 0 :(得分:0)

“秘密”算法必须在应用程序中......给予每个人。这根本不是秘密。无论如何,默默无闻的安全性都很糟糕,你不应该拥有所谓的秘密算法,因为保密是没有希望的。在这种情况下,算法很简单。

另请参阅Schneier定律。 :)

编辑:

因此从理论上讲,这永远不会是安全的,因为您放入应用程序的任何算法都需要在客户端上运行,因此可以进行分析和反编译。但有人可以说它不需要在理论上是安全的,如果它“足够安全”就可以了,即。风险足够低,因为例如获得算法所需的努力太多了。

然后考虑两种可能的选择:

  • 这是一个非常酷的API,每个人都想完全建立一个客户端,或者至少有一个这样的聚会。在这种情况下,没有太多的努力,算法将被“破坏”,也就是说,它将被反编译并在不同的客户端实现。

  • 人们并不关心这个API,对其他人来说构建客户端并不是很重要。在这种情况下,他们可能无论如何都不会构建客户端,并且可以使用更简单的方法来防止其他客户突然出现并取得合理的成功。

但显然,这是你的选择,类似于你所描述的方法确实提高了标准 - 只是不要指望它实际上是安全的,因为它不会。