【问题标题】:Different web.configs for one solution depending on which site request一种解决方案的不同 web.configs 取决于哪个站点请求
【发布时间】:2016-02-01 12:55:51
【问题描述】:

在我的 Web 应用程序中,我想要两种不同的身份验证模式。 Windows窗体

我想要达到的目标:

出于不相关的原因,我需要在 IIS 中设置两个不同的站点。 一个站点正在使用 Windows 身份验证,另一个站点正在使用表单。 我希望将站点映射到同一个项目。 唯一的区别应该是web.config文件,简单写一行:

Web.config 1

<authentication mode="Forms" />
    <authorization>
      <deny users="?" />
    </authorization>

Web.config 2

  <authentication mode="Windows" />
    <authorization>
      <deny users="?" />
    </authorization>

一个简单的解决方案是将两个站点映射到两个相同的项目,包含不同的配置。虽然,这可能会导致未来维护方面的问题/困难,因为必须记住发布两个项目的新更改。

"如果客户端尝试使用 url XXX 进入站点 1,则应提示他们 Windows 身份验证(在浏览器中配置为支持 SSO)。如果客户端尝试使用 url yyy 进入站点 2,则应提示他们在表单登录中输入 SQL 用户的凭据。"

是否有可能在没有两个相同项目的情况下实现我的愿望?

【问题讨论】:

    标签: c# asp.net-mvc forms iis config


    【解决方案1】:

    使用配置和配置转换。默认情况下,您的站点有两种配置:调试和发布。但是,您可以根据需要添加任意数量。例如,您可以添加“Site1”和“Site2”等配置(构建 > 配置管理器...)。然后,右键单击您的 Web.config 文件并选择“添加配置转换”。如果您展开 Web.config 项目,您现在将看到 Web.Site1.configWeb.Site2.config。这些是你的变换。使用config transform syntax,您可以为每个自定义标签&lt;authentication&gt;。然后,当您发布网站时,只需为您发布的网站版本选择正确的配置即可。

    【讨论】:

    • 你在最后一句话中迷失了我。如果我必须在发布时选择正确的配置,假设我选择“Web.Site1.config”,那么发布的解决方案将只包含来自该配置的配置?不是都。还是我错过了什么?
    • 发布时,您必须选择一个配置。通常,这是调试或发布之一。但是,如果您添加其他配置,那么您也可以从中进行选择,即本示例中的 Site1 和 Site2。当您选择一个配置时,该配置转换将应用于实际的 Web.config,然后发布转换后的 Web.config。
    • 我明白你在说什么,但我认为你误解了我想要的。您的建议是一种在开发和实时站点设置之间进行交换的简单方法。我想要的是同时发布时可用的两种不同配置。简单地说:如果客户在他的 windows 机器上进入网站,那么它将自动使用 site1.config 中的设置,否则他们将使用 site2.config。
    • 这是不可能的。 Web.config 基于应用程序,而不是基于用户。您不能按用户切换它,因为这需要重新启动整个 Web 应用程序。你能做的最好的就是发布两个不同的网站。如果设置正确,您甚至可以在内部和外部拥有到一台服务器的域路由,因此如果用户进入 Intranet,他们将获得 Windows Auth 版本。这是你能做的最好的。
    【解决方案2】:

    假设没有重叠,您可以在 web.config 中使用位置标签:

      <location path="Some/Path">
        <system.web>
          <authentication mode="Forms" />
          <authorization>
            <deny users="?" />
          </authorization>
        </system.web>
      </location>
      <location path="Another/Path">
        <system.web>
          <authentication mode="Windows" />
          <authorization>
            <deny users="?" />
          </authorization>
        </system.web>
      </location>
    

    路径是您的网址 XXX 和 YYY。

    【讨论】:

    • “假设没有重叠”是什么意思?我试过这种方法。但是收到一条错误消息,提示“使用注册为 allowDefinition='MachineToApplication' 的部分超出应用程序级别是错误的”。
    • 如果路径 XXX 和 YYY 完全独立。
    • 是的,它们是完全独立的。
    猜你喜欢
    • 2012-03-31
    • 1970-01-01
    • 2012-02-15
    • 1970-01-01
    • 2012-02-07
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多