代码之家  ›  专栏  ›  技术社区  ›  Magnus Johansson

不想把Facebook/Twitter API密钥存储在移动设备上,设计模式?

  •  5
  • Magnus Johansson  · 技术社区  · 14 年前

    我有一个问题,让我的秘密API密钥在世界各地潜在的数千个移动设备上。它很容易被黑客破解并用于恶意目的。

    那我有什么选择呢? 我猜是一个私有服务器,它有秘密的API密钥和一个封装所有方法调用的web服务。因此,与其让移动设备拥有密钥,不如执行以下操作:
    List<Friends> = service.GetFriends(secretKey);

    如果我的秘密API密钥被泄露并用于垃圾邮件/滥用目的,我必须关闭对所有用户的使用,让我的应用程序死于非命。

    因此,我的想法是,我可以使用移动设备唯一的设备ID并执行以下操作:
    List<Friends> = myService.GetFriends(deviceID);

    当然,恶意黑客可以用一个假设备ID调用我的web服务,但至少我现在可以控制黑名单设备ID。它还引入了一些潜在的带宽问题,但这是一个不太重要的问题。

    真正的PKI可能是不可能的,因为目标设备在当前版本中不处理HTTP客户端证书。

    还有什么好主意吗?

    1 回复  |  直到 14 年前
        1
  •  1
  •   Winfield    13 年前

    你不想把你的API密钥发布到Facebook或Twitter上,甚至在客户机中被混淆。

    你的直觉是正确的,通过你控制的服务来代理。限制对该服务的访问取决于您—未经授权使用的风险有多大?设备ID是一个很好的设备/用户标识线索,但可以伪造。

    可以使用更强大的身份验证方法(SMS auth等)来建立长期会话或设备密钥,但这些方法更复杂,并给最终用户带来更高的负担。

    TL;博士

    保护您的平台API密钥。保护你自己的API足够保护你的需求。