假设将Web软件部署到多个客户,可能需要为每个客户设置不同的身份验证模式。
假设1个客户想要使用表单身份验证,另一个想要使用Windows身份验证 - 可以通过在Web.config文件中相应地设置身份验证模式来管理。
但是,当向他们部署软件更新时,如何在不覆盖其身份验证模式的情况下获取新的Web.config文件?
包含文件是否可以完成这项工作(以便将设置保存在Web.config之外),还是有更好的方法来处理这个问题?
答案 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。