C# 存储服务帐户信息的最佳方式

C# 存储服务帐户信息的最佳方式,c#,asp.net-core-mvc,C#,Asp.net Core Mvc,我正在开发一个应用程序,它需要从active directory中输入一个功能“服务帐户”,以便通过模拟来执行需要提升的应用程序的某些功能。它将基本上为用户提供受应用程序功能限制的应用程序功能,而无需授予他们的帐户权限。在过去,我使用了SHA1加密哈希,并将加密密码存储在web.config中。这可能没有其他方法那么安全。这里的主要目标是能够在应用程序中存储服务帐户的用户id和密码,而无需在任何地方以明文形式存储。对此有何建议?ASP.NET Core的配置设置允许多个不同的配置源:JSON、环

我正在开发一个应用程序,它需要从active directory中输入一个功能“服务帐户”,以便通过模拟来执行需要提升的应用程序的某些功能。它将基本上为用户提供受应用程序功能限制的应用程序功能,而无需授予他们的帐户权限。在过去,我使用了SHA1加密哈希,并将加密密码存储在web.config中。这可能没有其他方法那么安全。这里的主要目标是能够在应用程序中存储服务帐户的用户id和密码,而无需在任何地方以明文形式存储。对此有何建议?

ASP.NET Core的配置设置允许多个不同的配置源:JSON、环境变量等。对于存储机密信息,有些源比其他源更适合,因此以下是您的主要选项:

  • 用户秘密:这对于开发来说是不需要动脑筋的。在开发过程中,任何类型的帐户信息、API密钥等都应存储在用户机密中。主要问题是,这只是为了发展。因此,您仍然需要为生产找到解决方案

  • 环境变量:虽然未加密,但环境变量至少将这些设置限制在特定服务器上(您可能已经在该服务器上存储了服务帐户的凭据,不管怎样),并且不受源代码控制。尽管如此,一些用户可能更喜欢安全性

  • Azure密钥库:目前,这是ASP.NET Core提供的唯一支持加密的分布式配置选项。当然不是免费的,但也没那么贵。如果你已经在Azure中运行了,这是一个不需要动脑筋的选择,但即使你不是这样,它仍然是一个不错的选择

  • 您还可以使用其他任何东西:ASP.NET核心的一个优点是,所有东西都是模块化的,并且可以交换。您可以使用内置的配置提供程序、第三方提供的配置提供程序,甚至可以使用您自己创建的自定义配置提供程序。特别是后一个事实,为您打开了一个充满可能性的世界,就好像您只需花时间编写自己的提供者,您就可以在使用时继续使用Web.config之类的工具,或者集成您想要使用的其他解决方案


  • 您是否担心站点的外部用户或有权访问服务器的管理员/其他人?似乎您可以在服务器端保护app.config。只要你不明确地提供公开数据的机制,外部用户就无法访问web.config。我最担心的是它以明文形式存储在任何地方,但SHA1有点过时,在我用同样的方式进行操作之前,我想看看是否有其他最佳实践用于此场景。我不知道为什么人们投票决定关闭这个网站,这是一个非常有效的问题,我在很多搜索中都找不到答案。你的问题基本上是在质疑我们的意见。我认为简单地改写你问题的最后一句话就能解决这个问题。