2

У меня есть веб-приложение, и мне нужно предоставить своим пользователям возможность переключить метод входа из FormsAuth в WindowsAuth. Мне удалось изменить файл web.config с помощью кода:Программно включить или отключить анонимную аутентификацию в IIS

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 моего WebAPP в это говорит, что конфигурация является неправильным. Чем я прочитал, это может работать в другом файле конфигурации, например appHost.config или что-то в этом роде, но я предпочитаю вносить изменения только в свое приложение, а не в IIS. Надеюсь, вы поймете, почему.

Итак, как я могу это сделать?

ответ

1

Хорошо, так, оказалось, что я не мог найти способ, чтобы динамически изменять режим аутентификации, но я нашел довольно аккуратное решение проблемы: я создал другое веб-приложение, вложил его в первый, установил режим Forms Auth для первого и Windows для вложенных и всякий раз, когда мне нужно было использовать возможности IIS для работы с доменом , группы пользователей и т. д., я использовал перенаправление от одного к другому, передавая данные с помощью файлов cookie и в качестве параметров URL.

1

Вы пытаетесь обновить неправильный раздел. anonymousAuthentication является частью system.webServer, а не system.web. Правильная конфигурация

<system.webServer> 
<security> 
    <authentication> 
    <anonymousAuthentication enabled="true" /> 
    </authentication> 
</security> 
</system.webServer> 

Вы можете изменить его, используя класс ServerManager найденный в Microsoft.Web.Administration. Поиск пакета самородок «Microsoft.Web.Administration». После того, как вы добавили ссылку на 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(); 
     } 
+0

Нет, нет, нет, я помещаю XML ** в нужную секцию ** (тот, который был отмечен), и все же я получаю это глупое сообщение HTTP Error 500.19, говорящее о сломанном файле конфигурации. – AgentFire

+1

Это не работает, потому что целевая конфигурация конфигурации «заблокирована» от настройки на уровне приложения, требуя внесения изменений вне приложения (например, изменения конфигурации на уровне машинного уровня/уровня IIS). –