Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Web services 如何唯一标识向API发出请求的桌面应用程序?_Web Services_Security_Api - Fatal编程技术网

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

Web services 如何唯一标识向API发出请求的桌面应用程序?,web-services,security,api,Web Services,Security,Api,我正在充实一个web服务的想法,该服务只允许来自已注册的桌面应用程序(仅限于桌面应用程序)的请求。我不能真正使用“密钥”进行身份验证,因为它很容易发现,而且使用API的应用程序将部署到许多不同的机器上,而这些机器不受帐户持有者的控制 我如何才能以跨平台的方式唯一地识别一个应用程序,而不让任何人都很容易模拟它?加密它(密钥),硬编码,然后混淆程序。对web服务使用HTTPS,这样它就不会被网络嗅探器捕获。您不能。只要你把信息放在一个不受控制的地方,你就必须假设信息会被传播。加密实际上并不适用,因为

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


我如何才能以跨平台的方式唯一地识别一个应用程序,而不让任何人都很容易模拟它?

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

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

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

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


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

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

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


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

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


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

就是这样。这不是我的桌面应用程序。我的web服务向希望在自己的桌面应用程序中使用它的公司公开功能。我只是想让某些人不可能向这些公司的帐户提交虚假数据。好吧,给他们凭证,如果他们泄露了凭证,那就是他们的问题。