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

时间:2009-11-12 20:50:20

标签: web-services security api

我正在充实了一个Web服务的想法,该服务只允许已经注册的桌面应用程序(和桌面应用程序)的请求。我无法真正使用“密钥”进行身份验证,因为它很容易被发现,使用API​​的应用程序将被部署到不受帐户持有者控制的许多不同机器上。

如何以跨平台的方式唯一地识别应用程序,使任何人都不容易冒充它?

3 个答案:

答案 0 :(得分:1)

你做不到。只要您将信息放在不受控制的地方,您就必须假设信息将被传播。加密并不真正适用,因为唯一基于加密的方法涉及在客户端保留密钥。

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

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


你评论提出了一个更简单的方案。公司有更强的动机来保护对服务的访问,如果他们无法保护访问权限,将会就您的责任制定法律协议。

最简单的方法是亚马逊所做的:提供密钥,并要求所有客户端使用该密钥进行加密。是的,这些公司内的流氓员工可以随心所欲地离开。所以你给公司选择(或者可能需要它们)来定期更改密钥。也许每天。

您可以通过IP检查对所有访问进行增强:每个客户都会为您提供一组有效的IP地址。如果有人走出桌面软件,他们仍然无法使用它。

或者,您可以要求公司代理您的服务。如果仅从公司防火墙内部访问服务,这将特别有用。

答案 1 :(得分:0)

加密(密钥),对其进行硬编码,然后对程序进行模糊处理。将HTTPS用于Web服务,以便网络嗅探器不会捕获它。

答案 2 :(得分:0)

使用特定于硬件的ID生成密钥 - 处理器ID,MAC地址等。考虑确定性GUID。

然后,您可以对其进行加密并通过网络发送。