如何在 .NET Framework 4.7.1 中使用 Azure KeyVault 覆盖 Web.config 值

2024-04-08

如何在 ASP.NET Framework 4.7.1 WebForms 应用程序中实现 Microsoft 的 Azure KeyVault 以覆盖中的值web.config使用 KeyVault 中的值?我确实看到参考资料表明我们需要最低版本的 .NET Framework 4.7.1 才能做到这一点,但 Microsoft 提供的示例适用于 .NET Core。我的配置为web.config文件而不是appsettings.json。我也有Global.asax.cs文件而不是Startup.cs and Program.cs.


要在 ASP.NET Framework 4.7.1 WebForms 应用程序中实现 Microsoft 的 Azure KeyVault,首先需要创建一个 Azure Key Vault。

  • 您需要提供一个资源组、唯一名称和位置,然后 单击“查看+创建”。
  • 可以参考创建Azure keyvault的步骤 这里>>(https://learn.microsoft.com/en-us/azure/key-vault/quick-create-portal https://learn.microsoft.com/en-us/azure/key-vault/quick-create-portal)
  • 接下来选择 Secrets 边栏选项卡并添加您的应用程序设置和 可以在 web.config 文件中访问的连接字符串。你可以 单击生成/导入按钮并选择上传选项 手动的。然后配置您的应用程序设置和连接字符串 - 名称和值选项的键和值。并保留其他选项 作为默认值。

ASP.NET 中的配置生成器提供了一种修改和/或覆盖来自配置文件 (Web.config 在 ASP.NET 的情况下)通过使用不同的源(环境 变量、Key Vault 等)。

连接到 Azure 密钥保管库:

  • To connect to Azure Key Vault from Visual Studio, you need to right click on the project and select Add > Connected Service menu. enter image description here

  • 从选项中,选择“使用 Azure Key Vault 保护机密”选项。

  • Now you may need to sign in if not already signed in to your account and then select rquired key vault from the list. enter image description here

  • 然后单击“添加”按钮将密钥保管库引用添加到您的 应用。这将添加 NuGet 包的引用 Microsoft.Configuration.ConfigurationBuilders.Azure 到项目。

它还会在 Web.Config 文件中添加一些配置。

(OR)

  • 在“解决方案资源管理器”中,右键单击您的项目,然后选择“管理” NuGet 包。在“浏览”选项卡中,找到并安装 Microsoft.Configuration.ConfigurationBuilders.Azure

打开你的网络配置文件,并写入以下代码:

a) 使用您的 keyvault 名称添加 configSections 和 configBuilders,如下所示

     <configSections>
        <section
            name="configBuilders"
            type="System.Configuration.ConfigurationBuildersSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
            restartOnExternalChanges="false"
            requirePermission="false" />
     </configSections>
     <configBuilders>
        <builders>
        <add
                name="AzureKeyVault"
                vaultName="vaultname"
                type="Microsoft.Configuration.ConfigurationBuilders.AzureKeyVaultConfigBuilder, Microsoft.Configuration.ConfigurationBuilders.Azure, Version=1.0.0.0, Culture=neutral"
                vaultUri="https://vaultname.vault.azure.net" />
        </builders>
     </configBuilders>

b) 找到 appSettings 标签,添加属性 configBuilders="AzureKeyVault",然后添加一行,如下所示:


    <appSettings configBuilders="AzureKeyVault">
      <add key="webpages:Version" value="3.0.0.0" />
      <add key="webpages:Enabled" value="false" />
      <add key="ClientValidationEnabled" value="true" />
      <add key="UnobtrusiveJavaScriptEnabled" value="true" />
      <add key="TextAnalyticsKey" value="from key vault" />
    </appSettings>

    <connectionStrings configBuilders="AzureKeyVault">
      <add name="DefaultConnection" connectionString="from key vault" providerName="System.Data.SqlClient" />
      <add key="StorageConnectionString" value="from key vault" />
    </connectionStrings>

c) 编辑 HomeController.cs 中的 About 方法,以显示确认值。

    public ActionResult About()
    {
        ViewBag.Message = "Key vault value = " + ConfigurationManager.AppSettings["TextAnalyticsKey"];
    }

通过这种方式,如果您运行的应用程序使用 .NET Framework 4.7 或更高版本,则可以在经典 ASP.NET MVC 应用程序中连接和使用 Azure Key Vault。

您可以参考以下文档以获得相同的详细解释:

  • https://learn.microsoft.com/en-us/azure/key-vault/general/vs-key-vault-add-connected-service#added-references-for-aspnet-framework https://learn.microsoft.com/en-us/azure/key-vault/general/vs-key-vault-add-connected-service#added-references-for-aspnet-framework
  • https://dotnetthoughts.net/azure-key-vault-in-aspnet-mvc/ https://dotnetthoughts.net/azure-key-vault-in-aspnet-mvc/帮助您如何在 ASP.NET MVC 应用程序中连接和使用 Azure Key Vault。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 .NET Framework 4.7.1 中使用 Azure KeyVault 覆盖 Web.config 值 的相关文章

  • 进程何时获得 SIGABRT(信号 6)?

    C 中进程获得 SIGABRT 的场景有哪些 该信号是否始终来自进程内部 或者该信号可以从一个进程发送到另一个进程吗 有没有办法识别哪个进程正在发送该信号 abort 向调用进程发送SIGABRT信号 就是这样abort 基本上有效 abo
  • 为什么libc++的shared_ptr实现使用完整内存屏障而不是宽松内存屏障?

    在boost的实现中shared ptr 它用放松内存排序以增加其引用计数 https github com boostorg smart ptr blob master include boost smart ptr detail sp
  • 构造函数中显式关键字的使用

    我试图了解 C 中显式关键字的用法 并查看了这个问题C 中的explicit关键字是什么意思 https stackoverflow com questions 121162 但是 那里列出的示例 实际上是前两个答案 对于用法并不是很清楚
  • 对齐 GridView 中的行值

    我需要在 asp net 3 5 中右对齐 gridview 列中的值 我怎样才能做到这一点
  • JSON 数组到 C# 列表

    如何将这个简单的 JSON 字符串反序列化为 C 中的列表 on4ThnU7 n71YZYVKD CVfSpM2W 10kQotV 这样 List
  • 访问者和模板化虚拟方法

    在一个典型的实现中Visitor模式 该类必须考虑基类的所有变体 后代 在许多情况下 访问者中的相同方法内容应用于不同的方法 在这种情况下 模板化的虚拟方法是理想的选择 但目前这是不允许的 那么 模板化方法可以用来解析父类的虚方法吗 鉴于
  • 如何从 C# 控制器重定向到外部 url

    我使用 C 控制器作为网络服务 在其中我想将用户重定向到外部网址 我该怎么做 Tried System Web HttpContext Current Response Redirect 但没有成功 使用控制器的重定向 http msdn
  • 当前的 c++ 工作草案与当前标准有何不同

    通过搜索该标准的 PDF 版本 我最终找到了这个链接C 标准措辞草案 http www open std org jtc1 sc22 wg21 docs papers 2012 n3376 pdf从 2011 年开始 我意识到我可以购买最终
  • Azure 事件中心 - 按顺序接收事件

    我使用下面的代码从 Azure Event Hub 接收事件 https learn microsoft com en us azure event hubs event hubs dotnet framework getstarted s
  • 基于xsd模式生成xml(使用.NET)

    我想根据我的 xsd 架构 cap xsd 生成 xml 文件 我找到了这篇文章并按照说明进行操作 使用 XSD 文件生成 XML 文件 https stackoverflow com questions 6530424 generatin
  • 如何重置捕获像素的值

    我正在尝试创建一个 C 函数 该函数返回屏幕截图位图中每四个像素的 R G 和 B 值 这是我的代码的一部分 for int ix 4 ix lt 1366 ix ix 4 x x 4 for int iy 3 iy lt 768 iy i
  • 获取 2 个数据集 c# 中的差异

    我正在编写一个简短的算法 它必须比较两个数据集 以便可以进一步处理两者之间的差异 我尝试通过合并这两个数据集并将结果更改放入新的数据集来实现此目标 我的方法如下所示 private DataSet ComputateDiff DataSet
  • 尚未处理时调用 Form 的 Invoke 时出现 ObjectDisposeException

    我们得到一个ObjectDisposedException从一个电话到Invoke在尚未处理的表格上 这是一些演示该问题的示例代码 public partial class Form2 Form void Form2 Load object
  • 在类的所有方法之前运行一个方法

    在 C 3 或 4 中可以做到这一点吗 也许有一些反思 class Magic RunBeforeAll public void BaseMethod runs BaseMethod before being executed public
  • 是否可以有一个 out ParameterExpression?

    我想定义一个 Lambda 表达式out范围 有可能做到吗 下面是我尝试过的 C Net 4 0 控制台应用程序的代码片段 正如您在 procedure25 中看到的 我可以使用 lambda 表达式来定义具有输出参数的委托 但是 当我想使
  • 当前的 x86 架构是否支持非临时加载(来自“正常”内存)?

    我知道有关此主题的多个问题 但是 我没有看到任何明确的答案或任何基准测量 因此 我创建了一个处理两个整数数组的简单程序 第一个数组a非常大 64 MB 第二个数组b很小 无法放入 L1 缓存 程序迭代a并将其元素添加到相应的元素中b在模块化
  • 剪贴板在 .NET 3.5 和 4 中的行为有所不同,但为什么呢?

    我们最近将一个非常大的项目从 NET Framework 3 5 升级到 4 最初一切似乎都工作正常 但现在复制粘贴操作开始出现错误 我已经成功制作了一个小型的可复制应用程序 它显示了 NET 3 5 和 4 中的不同行为 我还找到了一种解
  • 转到定义:“无法导航到插入符号下的符号。”

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 我今天突然开始在我的项目中遇到一个问题 单击 转到定义 会出现一个奇怪的错误 无法导航到
  • 使用 Crypto++ 获取 ECDSA 签名

    我必须使用 Crypto 在变量中获取 ECDSA 签名 我在启动 SignMessage 后尝试获取它 但签名为空 我怎样才能得到它 你看过 Crypto wiki 吗 上面有很多东西椭圆曲线数字签名算法 http www cryptop
  • 是否可以在 C# 中强制接口实现为虚拟?

    我今天遇到了一个问题 试图重写尚未声明为虚拟的接口方法的实现 在这种情况下 我无法更改接口或基本实现 而必须尝试其他方法 但我想知道是否有一种方法可以强制类使用虚拟方法实现接口 Example interface IBuilder

随机推荐