Добавление поставщиков <проверки подлинности Windows>
Общие сведения
Элемент <add>
<providers>
коллекции в элементе <windowsAuthentication>
указывает уникальный поставщик проверки подлинности, используемый с модулем iis 7 проверка подлинности Windows.
Совместимость
Версия | Примечания |
---|---|
IIS 10.0 | Элемент <add> не был изменен в IIS 10.0. |
IIS 8,5 | Элемент <add> не был изменен в IIS 8.5. |
IIS 8,0 | Элемент <add> не был изменен в IIS 8.0. |
IIS 7,5 | Элемент <add> не был изменен в IIS 7.5. |
IIS 7.0 | Элемент <add> коллекции появился <providers> в IIS 7.0. |
IIS 6,0 | Коллекция <providers> заменяет свойство метабазы IIS 6.0 NTAuthenticationProviders . |
Настройка
Установка iis 7 и более поздних версий по умолчанию не включает службу роли проверка подлинности Windows. Чтобы использовать проверка подлинности Windows в IIS, необходимо установить службу роли, отключить анонимную проверку подлинности для веб-сайта или приложения, а затем включить проверка подлинности Windows для сайта или приложения.
Примечание
После установки службы роли СЛУЖБЫ IIS 7 фиксирует следующие параметры конфигурации в файле ApplicationHost.config.
<windowsAuthentication enabled="false" />
Windows Server 2012 или Windows Server 2012 R2
- На панели задач щелкните Диспетчер сервера.
- В диспетчер сервера откройте меню Управление и выберите пункт Добавить роли и компоненты.
- В мастере добавления ролей и компонентов нажмите кнопку Далее. Выберите тип установки и нажмите кнопку Далее. Выберите целевой сервер и нажмите кнопку Далее.
- На странице Роли сервера разверните узел Веб-сервер (IIS),веб-сервер, затем узел Безопасность, а затем выберите Проверка подлинности Windows. Щелкните Далее.
.
- На странице Выбор компонентов нажмите кнопку Далее.
- На странице Подтверждение выбранных элементов для установки нажмите кнопку Установить.
- На странице Результаты нажмите кнопку Закрыть.
Windows 8 или Windows 8.1
- На начальном экране переместите указатель в левый нижний угол, щелкните правой кнопкой мыши кнопку Пуск и выберите пункт панель управления.
- В панель управления щелкните Программы и компоненты, а затем — Включить или выключить компоненты Windows.
- Разверните узлы Службы IIS, Веб-службы, Безопасность, а затем выберите Проверка подлинности Windows.
- Нажмите кнопку ОК.
- Щелкните Закрыть.
Windows Server 2008 или Windows Server 2008 R2
- На панели задач нажмите кнопку Пуск, наведите указатель мыши на пункт Администрирование, а затем щелкните диспетчер сервера.
- В области иерархии диспетчер сервера разверните узел Роли, а затем щелкните Веб-сервер (IIS) .
- В области Веб-сервер (IIS) прокрутите страницу до раздела Службы ролей и щелкните Добавить службы ролей.
- На странице Выбор служб ролеймастера добавления служб ролей выберите Проверка подлинности Windows и нажмите кнопку Далее.
- На странице Подтверждение выбранных элементов для установки нажмите кнопку Установить.
- На странице Результаты нажмите кнопку Закрыть.
Windows Vista или Windows 7
- На панели задач нажмите кнопку Пуск, а затем выберите пункт панель управления.
- В панель управления щелкните Программы и компоненты, а затем — Включить или отключить компоненты Windows.
- Разверните узел Службы IIS, Затем — Службы Интернета и Безопасность.
- Выберите Проверка подлинности Windows и нажмите кнопку ОК.
Инструкции
Пользовательский интерфейс для поставщиков проверка подлинности Windows для IIS 7 отсутствует. Примеры изменения списка поставщиков проверка подлинности Windows программными средствами см. в разделе Примеры кода этого документа.
Конфигурация
Атрибуты
Атрибут | Описание |
---|---|
Value |
Необязательный атрибут String. Указывает имя поставщика безопасности. По умолчанию существует два поставщика: Negotiate и NTLM. |
Дочерние элементы
Отсутствует.
Образец конфигурации
Следующий элемент по умолчанию <windowsAuthentication>
настраивается в корневом файле ApplicationHost.config в IIS 7.0 и по умолчанию отключает проверка подлинности Windows. Он также определяет два поставщика проверка подлинности Windows для IIS 7.0.
<windowsAuthentication enabled="false">
<providers>
<add value="Negotiate" />
<add value="NTLM" />
</providers>
</windowsAuthentication>
В следующем примере включается проверка подлинности Windows и отключается анонимная проверка подлинности для веб-сайта Contoso.
<location path="Contoso">
<system.webServer>
<security>
<authentication>
<anonymousAuthentication enabled="false" />
<windowsAuthentication enabled="true" />
</authentication>
</security>
</system.webServer>
</location>
Пример кода
В следующих примерах кода включается проверка подлинности Windows и удаляется поставщик Negotiate для сайта Contoso.
AppCmd.exe
appcmd.exe set config "Contoso" -section:system.webServer/security/authentication/windowsAuthentication /enabled:"True" /commit:apphost
appcmd.exe set config "Contoso" -section:system.webServer/security/authentication/windowsAuthentication /-"providers.[value='Negotiate']" /commit:apphost
Примечание
При использовании AppCmd.exe для настройки этих параметров для параметра apphost
фиксации необходимо задать значение . Это зафиксирует параметры конфигурации в соответствующем разделе расположения в файле ApplicationHost.config.
C#
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", "Contoso");
windowsAuthenticationSection["enabled"] = true;
ConfigurationElementCollection providersCollection = windowsAuthenticationSection.GetCollection("providers");
ConfigurationElement addElement = FindElement(providersCollection, "add", "value", @"Negotiate");
if (addElement == null) throw new InvalidOperationException("Element not found!");
providersCollection.Remove(addElement);
serverManager.CommitChanges();
}
}
private static ConfigurationElement FindElement(ConfigurationElementCollection collection, string elementTagName, params string[] keyValues)
{
foreach (ConfigurationElement element in collection)
{
if (String.Equals(element.ElementTagName, elementTagName, StringComparison.OrdinalIgnoreCase))
{
bool matches = true;
for (int i = 0; i < keyValues.Length; i += 2)
{
object o = element.GetAttributeValue(keyValues[i]);
string value = null;
if (o != null)
{
value = o.ToString();
}
if (!String.Equals(value, keyValues[i + 1], StringComparison.OrdinalIgnoreCase))
{
matches = false;
break;
}
}
if (matches)
{
return element;
}
}
}
return null;
}
}
VB.NET
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 windowsAuthenticationSection As ConfigurationSection = config.GetSection("system.webServer/security/authentication/windowsAuthentication", "Contoso")
windowsAuthenticationSection("enabled") = True
Dim providersCollection As ConfigurationElementCollection = windowsAuthenticationSection.GetCollection("providers")
Dim addElement As ConfigurationElement = FindElement(providersCollection, "add", "value", "Negotiate")
If (addElement Is Nothing) Then
Throw New InvalidOperationException("Element not found!")
End If
providersCollection.Remove(addElement)
serverManager.CommitChanges()
End Sub
Private Function FindElement(ByVal collection As ConfigurationElementCollection, ByVal elementTagName As String, ByVal ParamArray keyValues() As String) As ConfigurationElement
For Each element As ConfigurationElement In collection
If String.Equals(element.ElementTagName, elementTagName, StringComparison.OrdinalIgnoreCase) Then
Dim matches As Boolean = True
Dim i As Integer
For i = 0 To keyValues.Length - 1 Step 2
Dim o As Object = element.GetAttributeValue(keyValues(i))
Dim value As String = Nothing
If (Not (o) Is Nothing) Then
value = o.ToString
End If
If Not String.Equals(value, keyValues((i + 1)), StringComparison.OrdinalIgnoreCase) Then
matches = False
Exit For
End If
Next
If matches Then
Return element
End If
End If
Next
Return Nothing
End Function
End Module
JavaScript
var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";
var windowsAuthenticationSection = adminManager.GetAdminSection("system.webServer/security/authentication/windowsAuthentication", "MACHINE/WEBROOT/APPHOST/Contoso");
windowsAuthenticationSection.Properties.Item("enabled").Value = true;
var providersCollection = windowsAuthenticationSection.ChildElements.Item("providers").Collection;
var addElementPos = FindElement(providersCollection, "add", ["value", "Negotiate"]);
if (addElementPos == -1) throw "Element not found!";
providersCollection.DeleteElement(addElementPos);
adminManager.CommitChanges();
function FindElement(collection, elementTagName, valuesToMatch) {
for (var i = 0; i < collection.Count; i++) {
var element = collection.Item(i);
if (element.Name == elementTagName) {
var matches = true;
for (var iVal = 0; iVal < valuesToMatch.length; iVal += 2) {
var property = element.GetPropertyByName(valuesToMatch[iVal]);
var value = property.Value;
if (value != null) {
value = value.toString();
}
if (value != valuesToMatch[iVal + 1]) {
matches = false;
break;
}
}
if (matches) {
return i;
}
}
}
return -1;
}
VBScript
Set adminManager = WScript.CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"
Set windowsAuthenticationSection = adminManager.GetAdminSection("system.webServer/security/authentication/windowsAuthentication", "MACHINE/WEBROOT/APPHOST/Contoso")
windowsAuthenticationSection.Properties.Item("enabled").Value = True
Set providersCollection = windowsAuthenticationSection.ChildElements.Item("providers").Collection
addElementPos = FindElement(providersCollection, "add", Array("value", "Negotiate"))
If (addElementPos = -1) Then
WScript.Echo "Element not found!"
WScript.Quit
End If
providersCollection.DeleteElement(addElementPos)
adminManager.CommitChanges()
Function FindElement(collection, elementTagName, valuesToMatch)
For i = 0 To CInt(collection.Count) - 1
Set element = collection.Item(i)
If element.Name = elementTagName Then
matches = True
For iVal = 0 To UBound(valuesToMatch) Step 2
Set property = element.GetPropertyByName(valuesToMatch(iVal))
value = property.Value
If Not IsNull(value) Then
value = CStr(value)
End If
If Not value = CStr(valuesToMatch(iVal + 1)) Then
matches = False
Exit For
End If
Next
If matches Then
Exit For
End If
End If
Next
If matches Then
FindElement = i
Else
FindElement = -1
End If
End Function