阻止子应用程序中的web.config继承

问题描述 投票:6回答:2

我们有一个旧的.NET解决方案,它结合了MVC和WebForms内容,并且一些Web API项目作为网站根目录下的应用程序。显然,这些Web API应用程序将继承网站的web.config设置。

我们还有另一个项目-有界上下文-用于SSO身份验证,它位于同一根文件夹中,因此也继承了网站的web.config设置。此受限上下文应用程序已使用.NET Core构建。

- wwwroot   // .NET Framework
    - API 1 // .NET Framework
    - API 2 // .NET Framework
    - ...
    - SSO / authentication // bounded context, built in .NET Core

我们最近开始使用Azure Key Vault存储我们的机密,并在本地使用这些机密,我们正在使用secrets.xml文件。因此,根网站的web.config看起来像这样...

<configSections>
  <section name="configBuilders" ... />
</configSections>  

<configBuilders>
  <builders>
    <add name="Secrets" optional="false" userSecretsFile="~\secrets.xml" [elided attributes] />
  </builders>
</configBuilders>

<appSettings configBuilders="Secrets">
  <add key="a_key" value="value specified in secrets.xml" />
  ...
</appSettings>

这里是问题:Authentication受限上下文项目引发了一个异常,因为它找不到Microsoft.Configuration.ConfigurationBuilders.UserSecrets程序集-因为它继承了网站的配置,因此它需要知道该配置部分的全部内容。

但是如果引用.NET Core authentication项目中的NuGet包,我会收到消息...

此软件包可能与您的项目不完全兼容。

...它会自动回滚。

因此,如果无法在.NET Core子应用程序中引用UserSecrets程序集,那么如何获取它以识别继承的配置文件中的<configBuilders>部分?

我也尝试过删除元素...

<configSections>
  <section name="configBuilders" />
</configSections>

...从根配置文件开始,但是子应用程序随后看到<configBuilders>元素,但无法识别它。

所以问题归结为:

  1. 子应用程序需要一个NuGet包,其中定义了<configBuilders>元素。如果没有...
  2. 子应用程序看到<configSections> / <section name="configBuilders" />元素,需要知道它的定义位置。或者,我从子应用程序中删除该<section name="configBuilders" />元素,然后...
  3. 子应用程序看到<configBuilders>元素,需要知道哪个配置部分对此进行了定义。
c# web-config subapplication secretsmanager
2个回答
0
投票

在另一个虚拟目录中发布WEB API。创建重定向或重写规则,以将Web API通信路由到该虚拟目录。


0
投票

这是我们解决此问题的方法:

  1. 创建了一个自定义配置节,我们在其中声明了机密。注意以下事项的警告:为了在自定义配置节上声明configBuilders属性,您还必须声明SectionHandler<your-custom-config-section>-here's the docuumentation的相应实现。
  2. 将此自定义配置部分和自定义SectionHandler<T>添加到我们的顶级网站和该网站内的API项目,但未添加到.NET Core构建的SSO /身份验证子应用程序中
  3. 在顶级站点中,将自定义配置部分包装在<location path="." inheritInChildApplications="false">中。
  4. 缺点是,我们必须使用自定义配置管理器来获取机密,而所有非秘密的应用程序设置都是使用默认的ConfigurationManager来获取的,但我没有发现任何有关此问题的代码味道。

© www.soinside.com 2019 - 2024. All rights reserved.