gpt4 book ai didi

c# - CloudConfigurationManager 不会覆盖外部文件中的设置

转载 作者:行者123 更新时间:2023-11-30 21:46:49 26 4
gpt4 key购买 nike

我刚刚发现了 CloudConfigurationManager 的一个不起眼但又令人深感沮丧的错误。我正在寻找解决方法,以及(作为旁注)有关报告错误的最佳论坛的提示。我猜这将是一个相对快速的修复。

我有一个 Azure 应用服务,它通过名为 DocumentDB.EndpointDocumentDB.Key 的配置设置连接到 DocumentDb。这些在 F# 中通过

获取
let endpoint = config.ReadConfigSetting<string>("DocumentDB.Endpoint")
let key = config.ReadConfigSetting<string>("DocumentDB.Key")

ReadConfigSetting 方法是一种执行相关类型转换和默认赋值的便捷方法。它在幕后使用了CloudConfigurationManager.GetSetting。出于我们的目的,请将调用视为

let endpoint = CloudConfigurationManager.GetSetting("DocumentDB.Endpoint")
let key = CloudConfigurationManager.GetSetting("DocumentDB.Key")

我有一个网络作业,可以在我的文档数据库集合上执行 cron 作业。 CloudConfigurationManager 首先从应用服务设置中获取设置,如果在应用服务设置中找不到 key ,它将查看我的 webjob 的 app.config

在我的 QA 环境中,我的网络作业正在选择正确的端点,但错误的 key 。这是因为 DocumentDb.Endpoint 直接列在我的 app.config 文件中,但 DocumentDb.Key 位于一个单独的文件中,即 >.gitignored.我不希望 Git 存储库中包含敏感 key ,即使它是私有(private)的,并且凭据仅在 app.config 和我的外部文件中列出,以方便我使用调试器在本地运行作业。

这是我的设置:

应用程序配置

<appSettings file="keys.config">
<add key="agentUserName" value="<Everyone can read this>" />
<add key="apiHost" value="<and this>" />
<add key="DocumentDB.Endpoint" value="<points to my remote develpment copy of DocumentDB -- looking forward to when I can get a local repo>" />
</appSettings>

keys.config

<appSettings>
<add key="DocumentDB.Key" value="<This is private, so it's in this gitignored file>" />
<add key="agentPassword" value="<I'm not telling you>" />
<add key="TestUserPassword" value="<I'd be an idiot to post this value in a SO question>" />
</appSettings>

您可以看到发生了什么。

查找 DocumentDB.Key 值时 CloudConfigurationManager 的预期行为

  1. 查看底层应用服务设置中的 DocumentDB.Key 值
  2. 如果存在,请使用它。
  3. 否则,请查看 App.config
  4. 如果不存在,请查看 keys.config

CloudConfigurationManager 的实际行为

  1. keys.config 中有值吗?
  2. 如果是这样,请使用该值。
  3. 然后查看应用服务设置
  4. 然后App.config

我现在最好的解决方法是在发布 Web 作业时注释掉 keys.config 中的值,但这很笨拙。有没有更好的方法来做到这一点?

记录此问题的最佳位置在哪里?

最佳答案

您研究过 Azure Key Vault 吗?以下是 Azure Key Vault 的介绍:https://azure.microsoft.com/en-us/documentation/articles/key-vault-get-started/

如果将 DocumentDB secret 存储在 Azure Key Vault 中,则可以向应用程序级别授予对 secret 的访问权限。这是另一篇文章,展示了如何在 Web 应用程序中执行此操作:https://azure.microsoft.com/en-us/documentation/articles/key-vault-use-from-web-application/

希望有帮助。

谢谢。

冷宁

关于c# - CloudConfigurationManager 不会覆盖外部文件中的设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38981645/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com