如何在 C# 应用程序中正确保护 api 凭据

How to correctly secure api credentials in a c# application

好的,所以只是关于设置的一些背景知识。

我目前有一个 Web Api2 项目,它是此 restful api 的服务器端。客户端当前使用 username/password 组合来获取不记名令牌,然后在后续 api 调用中使用。该项目存储在 GitHub.

上的私有项目中

我正在寻求构建和部署将利用此 api 的 c# windows 服务。 关于 deploying/storing 凭据以及此 windows 服务的最佳做法是什么。

我控制 api 的两端,我还将控制 windows 服务的部署。这将被打包为一个 msi 并通过一些第 3 方软件(自动)部署。

这是要求

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

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

如果有人对如何完成此任务有任何建议或资源,那就太好了。

我不是专家,但我有一个类似的案例,我会抓住机会获得一些反对票:0)

desktop/service 应用程序中的一种方法是要求用户输入凭据。如果可能,那么这是最适合您的方法。 如果用户甚至可以输入一次凭据,您可以使用 ProtectedData 保存加密数据(使用此 class 您不必在代码中保存加密密钥,这很容易提取(使用反射器...))。

但是如果您想自动执行此操作并存储凭据,则没有好的方法。 您可以混淆凭据,防止脚本小子看到它们,但对于更认真的黑客来说,破解起来相当容易。

还有其他几个选项,但它们都是可破解的。 一种不同的方法是使用 MAC 地址和使用 ProtectedData class 保存的随机字符串(GUID 将完成这项工作)在服务器上注册每台机器,然后仅使用此特定 key-value 对将能够从您的 API 获取数据。 你在这里有 2 个问题:

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