代码之家  ›  专栏  ›  技术社区  ›  David Brown Muad'Dib

如何唯一标识向API发出请求的桌面应用程序?

  •  0
  • David Brown Muad'Dib  · 技术社区  · 16 年前

    我正在充实一个Web服务的想法,该服务只允许来自已注册的桌面应用程序(仅限桌面应用程序)的请求。我不能真正使用“秘密密钥”进行身份验证,因为它非常容易发现,并且使用API的应用程序将部署到许多不同的计算机上,而这些计算机不受帐户持有人的控制。

    我怎样才能以跨平台的方式唯一地标识一个应用程序,而不会让任何人难以置信地容易地模仿它?

    3 回复  |  直到 16 年前
        1
  •  1
  •   Mihai A    16 年前

    你不能。只要你把信息放在一个不受控制的地方,你就必须假设信息会被传播。加密实际上并不适用,因为基于加密的方法只涉及在客户端保留密钥。

    唯一真正的解决方案是将服务的价值放在服务本身中,并使桌面客户机成为访问该服务的低价值方式。MMORPG这样做:你可以免费下载游戏,但你需要注册才能玩。值在服务中,连接到服务的能力由服务控制(它在玩家首次连接时对其进行身份验证)。

    或者,你只是因为太痛苦而无法破坏安全。例如,通过在每个方法的开始和结束处放置一个凭证检查。而且,因为最终会有人创建一个二进制文件来修补所有这些检查,从服务器加载应用程序的片段。有了凭证和时间戳检查,并为每个下载使用不同的内存布局。


    您的评论提出了一个更简单的场景。公司有更强烈的动机来保护对服务的访问,并且如果他们不能保护访问,将有有效的法律协议来保护您的责任。

    最简单的方法是Amazon所做的:提供一个密钥,并要求所有客户机使用该密钥进行加密。是的,那些公司里的流氓员工可以带着这个秘密离开。所以你给公司一个选择(或者可能要求他们)来定期更改密钥。也许每天。

    您可以通过对所有访问进行IP检查来增强这一点:每个客户都将向您提供一组有效的IP地址。如果有人带着桌面软件出去,他们仍然不能使用它。

    或者,您可以要求公司代理您的服务。如果只从企业防火墙内部访问服务,这一点尤其有用。

        2
  •  0
  •   Bozho    16 年前

    加密(密钥),硬编码,然后混淆程序。对Web服务使用HTTPS,这样网络嗅探器就不会捕获它。

        3
  •  0
  •   Ryan Michela    16 年前

    使用硬件规范ID(处理器ID、MAC地址等)生成密钥。考虑确定性GUID。

    然后你可以加密并通过电线发送。