, я пытаюсь изменить установленное веб-приложение IIS и изменить методы аутентификации. Веб-сайт по умолчанию
настроен на добавление анонимности и отключение всего остального. Когда я использую следующую строку в PowerShell:
Write-Host "Enabling Basic Authentication"
Set-WebConfigurationProperty -Filter /system.webServer/security/authentication/basicAuthentication -Name enabled -Value true -PSPath "IIS:\Sites\Default Web Site\$app_name"
, я получаю следующую ошибку, и ничего не меняется.
Enabling Basic Authentication
Set-WebConfigurationProperty : This configuration section cannot be used at this path. This happens when the section is locked at a parent level.
Locking is either by default (overrideModeDefault="Deny"), or set explicitly by alocation tag with overrideMode="Deny" or the legacy allowOverride="false".
At E:\web_iis_applications\web_application\ps_Install_web_application.ps1:61 char:1
+ Set-WebConfigurationProperty -Filter /system.webServer/security/authe ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Set-WebConfigurationProperty], FileLoadException
+ FullyQualifiedErrorId : System.IO.FileLoadException,Microsoft.IIs.PowerShell.Provider.SetConfigurationPropertyCommand
Однако я могу войти прямо в пользовательский интерфейс и изменить эти записи, щелкнув правой кнопкой мыши, и все готово. Однако это не очень помогает, когда мне нужно выполнить 20 таких установок на 2 или 3 серверах. Я знаю, что мне не следует изменять настройку overridgeModeDefault
для веб-сайта по умолчанию
, поэтому я пытаюсь сделать это для каждой страницы на веб-сайте по умолчанию.
Я не разработчик этих приложений, поэтому не уверен, можно ли установить эти параметры в web.config или нет для каждого приложения.
Это снимает блокировку с разделов конфигурации access
и ipSecurity
:
$assembly = [System.Reflection.Assembly]::LoadFrom("$env:systemroot\system32\inetsrv\Microsoft.Web.Administration.dll")
$serverManager = new-object Microsoft.Web.Administration.ServerManager
$hostConfiguration = $serverManager.GetApplicationHostConfiguration()
$hostConfiguration.RootSectionGroup.SectionGroups["system.webServer"].SectionGroups['security'].Sections['access'].OverrideModeDefault = "Allow"
$hostConfiguration.RootSectionGroup.SectionGroups["system.webServer"].SectionGroups['security'].Sections['ipSecurity'].OverrideModeDefault = "Allow"
$serverManager.CommitChanges()
Теперь вы можете выполнять вызовы, как показано ниже :
Set-WebConfiguration -PSPath "IIS:\sites\Default Web Site" -Filter 'system.webserver/security/access' -Value 'Ssl,SslNegotiateCert,SslRequireCert'
Например, я хотел потребовать аутентификации сертификата клиента для определенных страниц, которые были открыты извне, но установить IP-фильтр на остальных «внутренних» страницах:
Set-WebConfiguration -PSPath "IIS:\sites\Default Web Site" -Filter 'system.webserver/security/access' -Value 'Ssl,SslNegotiateCert,SslRequireCert'
Set-WebConfiguration -PSPath "IIS:\sites\Default Web Site\InternalApi" -Filter 'system.webserver/security/access' -Value 'None'
Set-WebConfiguration -PSPath "IIS:\sites\Default Web Site\InternalApi" -Filter 'system.webserver/security/ipSecurity' -Value @{allowUnlisted="False"}
Add-WebConfigurationProperty -Filter 'system.webServer/security/ipSecurity' -PSPath "IIS:\sites\Default Web Site\InternalApi" -Name "." -Value @{ipAddress="172.16.1.0";allowed="true";subnetMask="16";}