2

誰かがコードサンプルまたはリソースを提供して、プログラムでステータスを取得し、 C#を使用したIIS 7 / IIS 7.5での認証の拡張保護を有効または無効にすることができますか?

WMI / ADSIを使用するC#が推奨されます。

つまり、C#を使用してSystem.ManagementAPIまたはMicrosoft.Web.AdministrationAPIを使用するように求められ、 EAPがWebサーバーレベルで有効になっているかどうかを判断する必要があります(将来のすべてのWebサイトのWebサーバーのデフォルトとして)。

C#を使用する他のソリューションも歓迎します。

役立つ回答を楽しみにしています。ありがとう

スティーブ

4

1 に答える 1

1

Microsoftは、この新しい概念 (つまり、認証の拡張保護、flag=extendedProtection) を説明するだけでなく、いくつかの言語でサンプル コード (以下にコピー) を提供する Web ページを親切にも提供してくれました。IIS7/7.5 で EAP を有効にする C# コードを次に示します。

これを WMI 経由で実装するには、明示的な資格情報を使用し、impersonationLevel=Impersonate を設定する必要があります。SO で Frank White によって最近作成された別の方法があります。

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();
      }
   }
}
于 2012-11-04T04:01:41.977 に答える