繁体   English   中英

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

[英]How to correctly secure api credentials in a c# application

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

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

我正在寻找构建和部署将利用此 api 的 ac# windows 服务。 与此 Windows 服务一起部署/存储凭据的最佳实践是什么。

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

以下是要求

  • 凭据不能存储在源代码管理中
  • 客户端的凭据不能为纯文本。

所以我的问题是,我如何将 api 凭证获取到客户端,而不是纯文本,而是可用的格式?

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM