首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在.env中处理机密的C#文件等效于什么?

在.env中处理机密的C#文件等效于什么?
EN

Stack Overflow用户
提问于 2022-10-12 18:59:17
回答 2查看 198关注 0票数 1

我在node.js代码中使用node.js文件来处理开发环境配置中的秘密。我将.env添加到项目的.gitignore中,以防止机密被提交到git存储库。

我发现node.js的.env方法非常简单和高效。

.env文件在C#中的等效值是多少?

有了这个问题,我不需要一个库在C#类(https://github.com/tonerdo/dotnet-env)中这样做。

我想知道c#处理同样事情的方法,强调不要在配置文件中向git存储库提交秘密。

这不是一个Azure问题,所以Azure Key Vault Azure不在这里的范围之内。

更新#1

请注意,我并不要求在我的.net应用程序中处理机密。

多年来,我一直在使用以下文件中的备选方案:

https://learn.microsoft.com/en-us/aspnet/core/security/app-secrets?view=aspnetcore-6.0&tabs=windows

一旦我开始学习node.js并使用.env,我希望在.net中也有同样的内容。

当我在我的开发人员笔记本上开发.env应用程序时,.env文件帮助我避免不断地调整环境变量。在生产中,我设置了env变量。

在本地开发人员膝上型计算机上,我喜欢将环境变量保存在.env文本文件中。我信任我的本地笔记本电脑加密的硬盘驱动器,在我的开发环境中不涉及生产密码。

本质上,我试图避免下面的选项以及在编写代码时不断调整环境变量的麻烦。

更新#2

此场景可能突出.env文件的优势:

当我在VSCODE中开发node.js应用程序时,我在一个单独的选项卡中打开了.env文件,以保持变量的变化,并在vscode终端中运行我的node.js应用程序。方案是在调试/跟踪应用程序时尝试不同的服务原则、不同的数据库凭据、网络凭据等。要在c#.netcode项目中快速执行同样的操作,我必须有一个bash脚本来设置环境变量,每次都会对其进行调整,并跟踪/调试我的应用程序。

虽然记住将set-secret-env-vars.sh添加到.gitignore文件是很重要的,但是请考虑node.js的标准.gitignore文件已经包含了.env,因为在node.js应用程序中这个过程是标准的和流线型的。

请注意,我以前在编写和调试node.js应用程序时使用了node.js方法。然后了解了.env,发现它更方便。这就是为什么我试图找到一个c#应用程序开发工作流的simialr方法。

更新#3

据我理解,这里讨论的大多数选项/解决方案都是特定于IDE或工具的。

launch.json是VSCODE的特点。如果要从中受益,需要使用VSCODE启动代码。使用.env方法,我可以运行node app1.jsnode app2.js等。

如果我需要使用JetBrain的骑士进行开发,会发生什么?这是一个非常受人尊敬的.net IDE。

我的观点是,.env并不依赖于任何一个IDE,据我所知,它被许多其他平台(如Python )所采用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-10-12 19:26:38

我会给你我认为是一个坚实的答案,但同时承认还有其他选择。

dotenv所做的基本上是为NodeJS过程创建环境变量。然后通过process.env访问这些数据。就这样。

如果您想要C#中的等价物,这已经可以从.Net配置框中获得。

就ASP.net而言,它伴随着预定义配置源。其中一个是无前缀环境变量源。这个方法从遵循标准化名称约定的环境变量中获取数据。

假设你有这样的appsettings.json

代码语言:javascript
复制
{
    "SecretSection": {
        "Username": "myUsername",
        "Password": "CatOnKeyboard"
    }

如果要拥有该JSON配置文件,则可能有一个在C#中声明的类(例如,MySecretSection),其中包含在服务中配置的属性UsernamePassword,如下所示:

代码语言:javascript
复制
var cfgSection = builder.Configuration.GetSection("SecretSection");
builder.Services.Configure<MySecretSection>(cfgSection);

这将允许您使用Options模式访问该节的数据

代码语言:javascript
复制
public class SomeService
{
    public SomeService(IOptions<MySecretSection> secretOptions)
    {
        // Now you can use the username and password:
        var opts = secretOptions.Value;
        System.Diagnostics.Debug.Print($"{opts.Username} : {opts.Password}");
    }
}

好的,但是在appsettings.json中,秘密数据绝对不应该公开给公众。

如果您愿意,您可以做dotenv所做的事情,只需为每个秘密创建环境变量。

  1. SECRETSECTION__USERNAME的值为myUsername
  2. SECRETSECTION__PASSWORD的值为CatOnKeyboard

就是这样。Asp.Net将自动获取那些环境变量,根据命名约定,这些变量表示分层密钥SecretSection:UsernameSecretSection:Password

对更新2的响应

要在c#或.netcode项目中快速执行同样的操作,我必须有一个bash脚本来设置环境变量,每次都会对其进行调整,并跟踪/调试我的应用程序。

不是的。为什么?使用.env做同样的事情,但是文件将是launch.json。而且你也是这样做的:不断地调整和运行,不涉及脚本。是因为您不知道可以在launch.json (VS代码)/launchSettings.json (Visual )中设置环境变量吗?

对更新3的响应

我明白你说的了。现在,我将正式欢迎您来到远超的.Net配置系统。

您可以看到,您生活在NodeJS世界中,配置包非常有限(dotenv),而.Net为您提供了一个非常、非常优越的配置系统。

您想避免编写脚本吗?您想要只更新一个文件并重新运行,不重新编译并且不绑定到IDE吗?.Net支持您:在appsettings.jsonappsettings.<environment>.json中进行调整并重新启动。如果您愿意,您甚至可以避免重新启动,如果您调整配置的配置。

Side :我为您的JavaScript需求(服务器和浏览器)创建了一个配置包,它模仿.Net提供的内容:wj-config

票数 1
EN

Stack Overflow用户

发布于 2022-10-12 19:14:38

如果您正在使用.Net应用程序,那么您可以在本地使用User secrets。这将不会被签入,因为文件不是解决方案的一部分,甚至不需要将其保存在gitignore中。

用法:在Visual中,右键单击解决方案资源管理器中的项目,然后从上下文菜单中选择。

有关更多细节,请参阅https://learn.microsoft.com/en-us/aspnet/core/security/app-secrets?view=aspnetcore-6.0&tabs=windows

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74046813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档