Поставщики <проверки подлинности Windows>
Общие сведения
Коллекция <providers>
<windowsAuthentication>
элемента определяет список поставщиков проверки подлинности, используемых с модулем IIS 7 проверка подлинности Windows. Этот список поставщиков не может быть расширен и по умолчанию содержит только две записи:
- Согласование . Этот поставщик попытается использовать Kerberos для проверки подлинности, если он доступен.
- NTLM — этот поставщик попытается использовать Windows NT LAN Manager для проверки подлинности.
Совместимость
Версия | Примечания |
---|---|
IIS 10.0 | Элемент <providers> не был изменен в IIS 10.0. |
IIS 8,5 | Элемент <providers> не был изменен в IIS 8.5. |
IIS 8,0 | Элемент <providers> не был изменен в IIS 8.0. |
IIS 7,5 | Элемент <providers> не был изменен в IIS 7.5. |
IIS 7.0 | Элемент <providers> элемента появился <windowsAuthentication> в IIS 7.0. |
IIS 6,0 | Коллекция <providers> заменяет свойство метабазы NTAuthenticationProviders IIS 6.0. |
Настройка
Установка служб 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 программными средствами см. в разделе Примеры кода этого документа.
Конфигурация
Атрибуты
Отсутствует.
Дочерние элементы
Элемент | Описание |
---|---|
add |
Необязательный элемент. Добавляет поставщик безопасности в коллекцию поставщиков. проверка подлинности Windows требуется по крайней мере один поставщик. |
remove |
Необязательный элемент. Удаляет ссылку на поставщика безопасности из коллекции providers. |
clear |
Необязательный элемент. Удаляет все ссылки на поставщиков из коллекции поставщиков. |
Образец конфигурации
Следующий элемент по умолчанию <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