Web.config - 允许为每个部署更改身份验证模式

时间:2017-01-11 23:59:17

标签: asp.net asp.net-mvc web-config

假设将Web软件部署到多个客户,可能需要为每个客户设置不同的身份验证模式。

假设1个客户想要使用表单身份验证,另一个想要使用Windows身份验证 - 可以通过在Web.config文件中相应地设置身份验证模式来管理。

但是,当向他们部署软件更新时,如何在不覆盖其身份验证模式的情况下获取新的Web.config文件?

包含文件是否可以完成这项工作(以便将设置保存在Web.config之外),还是有更好的方法来处理这个问题?

1 个答案:

答案 0 :(得分:0)

两个选项

以编程方式设置身份验证模式

您可以自定义代码,以便以编程方式设置身份验证模式,可能基于客户端数据库实例中的业务规则设置。

例如,这会设置Windows身份验证模式:

String applicationPath = String.Format("{0}/{1}", _server.Sites["Default Web Site"].Name, "AppName");

Configuration config = _server.GetApplicationHostConfiguration();

ConfigurationSection anonymousAuthenticationSection = config.GetSection("system.webServer/security/authentication/anonymousAuthentication", applicationPath);

anonymousAuthenticationSection["enabled"] = false;

ConfigurationSection windowsAuthenticationSection = config.GetSection("system.webServer/security/authentication/windowsAuthentication", applicationPath);

windowsAuthenticationSection["enabled"] = true;

_server.CommitChanges();

使用单独的配置文件

或者,你可以"外包"配置到每个客户端分发的单独配置文件,例如,见this answer

<authentication configSource="ConfigFiles\authentication.config" />

同时执行

您可以对站点进行编码,以便以编程方式选择身份验证设置的配置源,可能基于传入的http请求中的主机头。

authenticationSection.ConfigSource = String.Format("d:\Configurations\{0}.config", HttpContext.Current.Request.Host);

然后,您为每个客户端分发辅助配置文件。

FirstCustomer.com.config

SomeOtherCustomer.com.config

YetAnother.net.config

请参阅this article