如何使用WMI / ADSI和C#启用/禁用/获取IIS中的身份验证扩展保护状态?

时间:2012-10-30 17:39:26

标签: c# iis-7 iis-7.5 wmi adsi

有人可以提供代码示例或资源,可以帮助我以编程方式获取状态,启用和禁用使用C#在IIS 7 / IIS 7.5中进行身份验证的扩展保护吗?

首选使用WMI / ADSI的C#。

即我被要求使用C#使用 System.Management API或 Microsoft.Web.Administration API,我需要确定是否启用了 EAP在Web服务器级别(作为所有未来网站的Web服务器默认值)。

使用C#的任何其他解决方案也是受欢迎的。

期待有用的答案。感谢

史蒂夫

1 个答案:

答案 0 :(得分:1)

Microsoft graciously provided a web page不仅解释了这个新概念(即,身份验证的扩展保护,flag = extendedProtection),还提供了多种语言的示例代码(下面复制)。这是在IIS7 / 7.5中启用EAP的C#代码。

通过WMI实现此功能需要使用显式凭据并设置impersonationLevel = Impersonate。最近由Frank White在SO上创建了另一种方法,我在这里详细介绍了一个完整的代码:https://stackoverflow.com/a/11948096/1569434

using System;
using System.Text;
using Microsoft.Web.Administration;

internal static class Sample
{
   private static void Main()
   {
      using (ServerManager serverManager = new ServerManager())
      {
         Configuration config = serverManager.GetApplicationHostConfiguration();

         ConfigurationSection windowsAuthenticationSection = config.GetSection("system.webServer/security/authentication/windowsAuthentication", "Default Web Site");
         windowsAuthenticationSection["enabled"] = true;

         ConfigurationElement extendedProtectionElement = windowsAuthenticationSection.GetChildElement("extendedProtection");
         extendedProtectionElement["tokenChecking"] = @"Allow";
         extendedProtectionElement["flags"] = @"None";

         ConfigurationElementCollection extendedProtectionCollection = extendedProtectionElement.GetCollection();

         ConfigurationElement spnElement = extendedProtectionCollection.CreateElement("spn");
         spnElement["name"] = @"HTTP/www.contoso.com";
         extendedProtectionCollection.Add(spnElement);

         ConfigurationElement spnElement1 = extendedProtectionCollection.CreateElement("spn");
         spnElement1["name"] = @"HTTP/contoso.com";
         extendedProtectionCollection.Add(spnElement1);

         serverManager.CommitChanges();
      }
   }
}