如何阻止应用程序使用我的api密钥?

时间:2015-03-26 19:24:02

标签: c# api ssl encryption

我的组织有一个Win32应用程序,该应用程序是在"胖客户端"样式。我正在编写一个C#Client / Server解决方案,它将取代这个Win32应用程序。我使用ASP.NET MVC作为服务器,客户端是WPF应用程序。我做了我自己的OAuth 2规范的自定义实现。我打算创建一个Restful API,我不仅希望我的客户使用它,而且还允许第三方使用它。

每个应用程序都会发出一个api密钥,包括官方客户端,但官方客户端的api密钥应该允许第三方用户不允许使用的其他api范围(权限)。很明显如何解决这个问题,但是如果你认为并不是每个人都能很好地发挥作用,那么你必须要问"什么会阻止某人假装他们是官方客户并使用它的api密钥?&# 34;通信将被加密,但服务器不在云端或类似我们可以控制的地方。我们的客户在自己的机器上安装服务器,他们很可能可以访问服务器应用程序的SSL证书。一旦你有了这个,你就可以轻松编写一个可以在我们客户的机器上运行的应用程序,它可以从官方客户端应用程序收集API密钥和秘密,并使用该信息从服务器请求令牌,就像你是官方客户。

我打算自行签署服务器使用的默认密钥,我可以尝试在应用程序中隐藏它,但这实际上只是混淆。此外,我希望允许用户提供自己的SSL证书,以便基于浏览器的第三方应用程序不会出现浏览器抱怨他们试图在自签名SSL通道上进行通信的问题。

我能做些什么吗?我认为这是我的选择:

1)我可以对其进行设置,以便只使用我们提供的SSL证书,并将它们隐藏在使用应用程序代码中混淆的秘密加密的磁盘上。然后我们希望没有人会花时间挖掘我们的.net程序集来找到用于加密/解密磁盘上的证书的秘密。

2)我们允许他们提供证书,以便在他们想要使用签名证书时我们根本不需要参与该流程(我们不想参与证书业务)。现在我们甚至无法隐藏混淆,所以如果有人想要它,那么官方客户的API密钥和秘密很容易获得。

对我来说似乎都不是很理想。选项1使得我们必须向他们请求额外资金并在自签名不为他们工作时管理SSL证书,并且如果有人真正想要他们,他们仍然可以花时间来获取它们。选项2只是让窃取官方客户的秘密变得非常容易。

2 个答案:

答案 0 :(得分:0)

想要限制非官方应用的原因:
1.劝阻克隆人 A.告诉别人不要这样做。让律师向流行应用程序的作者(以及任何帮助分发它们的人)发送停止和终止信件。间歇性地下载它们并更改客户端/服务器代码,以便流行的应用程序中断。为了增加劝阻,暂时禁止使用热门应用的任何用户。作者将主要放弃克隆您的应用程序;暂时禁止用户将杀死他们的安装基地。这对你的声誉并不好
2.防止未经授权的行为 答:自定义应用程序应允许官方应用程序允许的任何行为。无论你担心什么情况,都要阻止服务器端,这样任何一个应用程序都无法做到。

您可以尝试隐藏凭据(代码混淆,隐藏凭据等),但这只会增加成本/难度。这通常足以阻止代码被盗(不需要使代码被盗;不足以使其比手工复制更难)。但是,想要以不受支持的方式使用api的用户可以解决此问题。

答案 1 :(得分:0)

答案很简单。您应用的每个实例都应该有效地为用户注册其自己的唯一键。然后,您禁止违反规则的用户。在这种情况下,使用非授权客户端登录。应该通过更频繁地推送更新来检测它们,而不是对它们进行逆向工程的成本效益。就像朋克克星或其他反作弊技术一样

相关问题