Программно включить проверку подлинности форм в IIS 7.0

В настоящее время я использую System.DirectoryServices.DirectoryEntry и свойство AuthFlags для установки анонимного доступа к виртуальной сети. Чтобы включить анонимный доступ, я присваиваю ему значение 1. Какое значение мне нужно установить, чтобы включить аутентификацию с помощью форм?

У меня в голове есть идея, что, может быть, это устанавливается только через web.config?


person Dustin Kendall    schedule 27.09.2010    source источник


Ответы (3)


Я заметил, что вы используете System.DirectoryServices для настройки этих функций в IIS7 (в соответствии с вашими тегами).

В IIS7 вы можете настроить оба этих параметра, используя вместо этого библиотеку Microsoft.Web.Administration:

Установка типа аутентификации (заменяет AuthFlags):

Конфигурация IIS 7: аутентификация безопасности <authentication>

Чтобы настроить аутентификацию с помощью форм:

using Microsoft.Web.Administration;
   ...
long iisNumber = 1234;
using(ServerManager serverManager = new ServerManager())
{
  Site site = serverManager.Sites.Where(s => s.Id == iisNumber).Single();

  Configuration config = serverManager.GetWebConfiguration(site.Name);
  ConfigurationSection authenticationSection = 
               config.GetSection("system.web/authentication");
  authenticationSection.SetAttributeValue("mode", "Forms");

  ConfigurationSection authorizationSection = 
               config.GetSection("system.web/authorization");
  ConfigurationElementCollection addOrDenyCollection = 
               authorizationSection.GetCollection();
  ConfigurationElement allowElement = addOrDenyCollection.CreateElement("allow");
  allowElement["users"] = "?";

  addOrDenyCollection.Add(allowElement);
  serverManager.CommitChanges();
}

Приведенный выше код создаст новый файл web.config в корне веб-сайта или изменит существующий.

Чтобы использовать Microsoft.Web.Administration, добавьте ссылку на C:\Windows\System32\InetSrv\Microsoft.Web.Administration.dll.

person Kev    schedule 28.09.2010
comment
Итак, как я уже говорил в своем последнем предложении, вы говорите, что лучший способ — просто изменить файл web.config? Спасибо за это кстати. - person Dustin Kendall; 29.09.2010
comment
@zip - да, это был бы способ сделать это. - person Kev; 29.09.2010

Я бы рекомендовал немного другой подход при поддержке IIS 7 или 7.5. Концепции аналогичны, но с меньшим упором на ‹system.web›, ориентированный на ASP.Net, в локальном приложении web.config, на акцент на ‹system.webServer›, ориентированный на IIS, в серверном applicationHost.config.

Начните с нижней части этой ссылки и прокрутите вверх... http://www.iis.net/ConfigReference/system.webServer/security/authentication/windowsAuthentication

Imports System
Imports System.Text
Imports Microsoft.Web.Administration

Module Sample
   Sub Main()
      Dim serverManager As ServerManager = New ServerManager
      Dim config As Configuration = serverManager.GetApplicationHostConfiguration

      Dim anonymousAuthenticationSection As ConfigurationSection = config.GetSection("system.webServer/security/authentication/anonymousAuthentication", "Default Web Site/App1")
      anonymousAuthenticationSection("enabled") = False

      Dim windowsAuthenticationSection As ConfigurationSection = config.GetSection("system.webServer/security/authentication/windowsAuthentication", "Default Web Site/App1")
      windowsAuthenticationSection("enabled") = True

      serverManager.CommitChanges()
   End Sub
End Module

Основной подход заключается в внесении изменений в IIS Manager и наблюдении за изменением конфигурации хоста приложения для этого приложения. Затем вы реплицируете эти изменения, соответствующим образом управляя новой сборкой Microsoft.Web.Administration.

Расположение: %systemroot%\system32\inetsrv\config\applicationHost.config

Что искать:

<location path="Default Web Site/App1">
    <system.webServer>
        <security>
            <authentication>
                <anonymousAuthentication enabled="true" />
                <windowsAuthentication enabled="true" />
            </authentication>
        </security>
    </system.webServer>
</location>
person Matt Poland    schedule 15.02.2011
comment
Чего я не понимаю, так это откуда берется /App1? - person Andrew Harry; 12.12.2012

Источник

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 anonymousAuthenticationSection = config.GetSection("system.webServer/security/authentication/anonymousAuthentication", "Contoso");
         anonymousAuthenticationSection["enabled"] = false;

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

         serverManager.CommitChanges();
      }
   }
}
person Zakos    schedule 22.04.2014