如何正确保护c#应用程序中的api凭据

时间:2017-01-19 14:32:18

标签: c# api asp.net-web-api2 restful-authentication

好的,这只是设置的一些背景知识。

我目前有一个Web Api2项目,它是这个restful api的服务器端。客户端当前使用用户名/密码组合来获取承载令牌,然后在后续的api调用中使用该令牌令牌。该项目存储在GitHub上的私人项目中。

我正在寻找构建和部署将使用此api的c#windows服务。 与Windows服务一起部署/存储凭证的最佳做法是什么。

我控制api的两端,我也将控制Windows服务的部署。这将打包为msi并通过某些第三方软件(自动化)进行部署。

以下是要求

  • 凭据无法存储在源代码管理中
  • 凭据不能在客户端以纯文本格式显示。

所以我的问题是,如何将api凭据提供给客户端,而不是以纯文本形式,而是以可用的格式?

或者我应该为api寻找不同类型的身份验证?我简要介绍了oauth2,但据我所知,你需要有人在客户端接受吗?

如果有人对如何实现这一点有任何建议或资源,那就太棒了。

1 个答案:

答案 0 :(得分:1)

我不是专家,但我有类似的情况,我会抓住机会获得一些投票:0)

桌面/服务应用程序中的一种方法是要求用户输入凭据。如果有可能,那么这是最适合您的方式。 如果用户甚至可以输入一次凭证,则可以使用ProtectedData保存加密的数据(使用此类,您无需在代码中保存加密密钥,这很容易提取(使用反射器)。 ..))。

但是,如果您想自动执行此操作并存储凭据,则无法做到这一点。 您可以对凭据进行模糊处理,并防止脚本小孩看到它们,但对于更严重的黑客来说,它很容易被黑客攻击。

还有其他一些选择,但它们都是hackables。 另一种方法是使用MAC地址和随机字符串(GUID将完成工作)在服务器上注册每台计算机,使用ProtectedData类保存,然后只有这个特定的键值对才能从中获取数据你的API。 你有2个问题:

  1. 如果用户卸载应用程序并重新安装,则他将无法重新连接到服务器(因为他无法重新生成相同的GUID)。您可以删除服务器中的用户并创建新用户,但您不能只更改服务器上的guid,因为任何人都可以破解服务器上的用户数据。
  2. 任何人都可以在您的API上打开用户并使用它。