以编程方式在 IIS 中启用或禁用匿名身份验证
Programmatically enable or disable anonymous authentication in IIS
我有一个 Web 应用程序,我需要为其用户提供将登录方法从 FormsAuth 切换到 WindowsAuth 的选项。我设法通过代码更改 web.config 文件:
Configuration config = WebConfigurationManager.OpenWebConfiguration(Url.Content("~"));
AuthenticationSection auth = ((AuthenticationSection)(config.SectionGroups["system.web"].Sections["authentication"]));
auth.Mode = AuthenticationMode.Windows; // Or Forms if I want to.
config.Save();
但问题是,当我使用 FormsAuth 时,我需要打开 Anonymouse 身份验证选项,而当我使用 WinAuth 时,我需要关闭它。我只是找不到通过代码更改该选项的方法。
互联网上的一切都说要这样做:
<security>
<authentication>
<anonymousAuthentication enabled="false/true" />
</authentication>
</security>
但是当我将它插入到我的网络应用程序的 web.config 时,它说配置错误。比我读到的这可能适用于另一个配置文件,如 appHost.config 或类似的东西,但我更喜欢只对我自己的应用程序而不是 IIS 进行更改我希望你明白为什么。
那么,我该怎么做呢?
您正在尝试更新错误的部分。 anonymousAuthentication 是 system.webServer 而不是 system.web 的一部分。正确的配置是
<system.webServer>
<security>
<authentication>
<anonymousAuthentication enabled="true" />
</authentication>
</security>
</system.webServer>
您可以使用 Microsoft.Web.Administration 中的 ServerManager class 对其进行修改。搜索 nugget 包 "Microsoft.Web.Administration"。使用 nugget 添加对 Microsoft.Web.Administration.dll 的引用后,您可以使用如下代码对其进行修改:
using (ServerManager serverManager = new ServerManager())
{
Microsoft.Web.Administration.Configuration config = serverManager.GetApplicationHostConfiguration();
Microsoft.Web.Administration.ConfigurationSection anonymousAuthenticationSection = config.GetSection("system.webServer/security/authentication/anonymousAuthentication");
anonymousAuthenticationSection["enabled"] = true;
serverManager.CommitChanges();
}
好吧,原来我找不到动态更改身份验证模式的方法,但我找到了解决问题的非常巧妙的方法:我创建了另一个 Web 应用程序,将其嵌套在第一个应用程序中,设置了第一个表单身份验证模式和嵌套的 Windows 以及每当我需要使用 IIS 的功能来处理域、用户组等时,我使用从一个到另一个的重定向,通过 cookie 传递数据并作为 url参数。
我有一个 Web 应用程序,我需要为其用户提供将登录方法从 FormsAuth 切换到 WindowsAuth 的选项。我设法通过代码更改 web.config 文件:
Configuration config = WebConfigurationManager.OpenWebConfiguration(Url.Content("~"));
AuthenticationSection auth = ((AuthenticationSection)(config.SectionGroups["system.web"].Sections["authentication"]));
auth.Mode = AuthenticationMode.Windows; // Or Forms if I want to.
config.Save();
但问题是,当我使用 FormsAuth 时,我需要打开 Anonymouse 身份验证选项,而当我使用 WinAuth 时,我需要关闭它。我只是找不到通过代码更改该选项的方法。
互联网上的一切都说要这样做:
<security>
<authentication>
<anonymousAuthentication enabled="false/true" />
</authentication>
</security>
但是当我将它插入到我的网络应用程序的 web.config 时,它说配置错误。比我读到的这可能适用于另一个配置文件,如 appHost.config 或类似的东西,但我更喜欢只对我自己的应用程序而不是 IIS 进行更改我希望你明白为什么。
那么,我该怎么做呢?
您正在尝试更新错误的部分。 anonymousAuthentication 是 system.webServer 而不是 system.web 的一部分。正确的配置是
<system.webServer>
<security>
<authentication>
<anonymousAuthentication enabled="true" />
</authentication>
</security>
</system.webServer>
您可以使用 Microsoft.Web.Administration 中的 ServerManager class 对其进行修改。搜索 nugget 包 "Microsoft.Web.Administration"。使用 nugget 添加对 Microsoft.Web.Administration.dll 的引用后,您可以使用如下代码对其进行修改:
using (ServerManager serverManager = new ServerManager())
{
Microsoft.Web.Administration.Configuration config = serverManager.GetApplicationHostConfiguration();
Microsoft.Web.Administration.ConfigurationSection anonymousAuthenticationSection = config.GetSection("system.webServer/security/authentication/anonymousAuthentication");
anonymousAuthenticationSection["enabled"] = true;
serverManager.CommitChanges();
}
好吧,原来我找不到动态更改身份验证模式的方法,但我找到了解决问题的非常巧妙的方法:我创建了另一个 Web 应用程序,将其嵌套在第一个应用程序中,设置了第一个表单身份验证模式和嵌套的 Windows 以及每当我需要使用 IIS 的功能来处理域、用户组等时,我使用从一个到另一个的重定向,通过 cookie 传递数据并作为 url参数。