Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Общие сведения
Элемент <customAuthorization> задает параметры для пользовательской авторизации FTP-сайта. Эта форма авторизации использует настраиваемые поставщики авторизации для проверки доступа пользователей.
Если включить настраиваемый поставщик авторизации, встроенный поставщик авторизации не будет использоваться, и вы не сможете вручную добавить в конфигурацию разрешающее или запрещающее правило.
Сведения о создании настраиваемого поставщика см. в статье How to Use Managed Code (C#) to Create a Simple FTP Home Directory Provider ( How to Use Managed Code (C#) to Create a Simple FTP Home Directory Provider (Создание простого поставщика домашнего каталога FTP).
Совместимость
| Версия | Примечания |
|---|---|
| IIS 10.0 | Элемент <customAuthorization> не был изменен в IIS 10.0. |
| IIS 8,5 | Элемент <customAuthorization> не был изменен в IIS 8.5. |
| IIS 8,0 | Элемент <customAuthorization> появился в IIS 8.0. |
| IIS 7,5 | Н/Д |
| IIS 7.0 | Н/Д |
| IIS 6,0 | Н/Д |
Настройка
Для поддержки авторизации FTP с помощью настраиваемого поставщика на ftp-сайте необходимо установить службу FTP с расширением FTP.
Windows Server 2012
Нажмите клавишу с логотипом Windows и щелкните диспетчер сервера.
В диспетчер сервера щелкните Управление, а затем — Добавить роли и компоненты.
В мастере добавления ролей и компонентов выполните следующие действия.
- На странице Прежде чем приступить к работе нажмите кнопку Далее.
- На странице Тип установки выберите тип установки и нажмите кнопку Далее.
- На странице Выбор сервера выберите соответствующий сервер и нажмите кнопку Далее.
- На странице Роли сервера убедитесь, что выбран параметр Веб-сервер (IIS), а затем разверните его.
- Разверните узел FTP-сервер, затем выберите Служба FTP и Расширяемость FTP, а затем нажмите кнопку Далее.
- На странице Компоненты нажмите кнопку Далее.
- На странице Подтверждение выбранных элементов для установки нажмите кнопку Установить.
- На странице Результаты нажмите кнопку Закрыть.
Windows 8
- Откройте панель управления Windows.
- В панель управления Windows откройте раздел Программы и компоненты.
- В разделе Программы и компоненты щелкните Включение или отключение компонентов Windows.
- В диалоговом окне Компоненты Windows разверните узел Службы IIS, а затем узел FTP-сервер.
- В разделе FTP-сервер выберите Служба FTP и расширяемость FTP, а затем нажмите кнопку ОК.
Инструкции
Настройка авторизации FTP на основе пользовательского поставщика
Откройте диспетчер служб IIS.
Если вы используете Windows Server 2012 или более поздней версии:
- На панели задач щелкните диспетчер сервера, инструменты, а затем диспетчер служб IIS.
Если вы используете Windows 8 или более поздней версии:
- Удерживая нажатой клавишу Windows, нажмите букву X и щелкните панель управления.
- Щелкните Администрирование, а затем дважды щелкните диспетчер служб IIS.
В области Подключения выберите имя сервера, разверните узел Сайты, а затем выберите FTP-сайт.
На панели Главная дважды щелкните функцию Правила авторизации FTP .
В области Действия щелкните Изменить параметры компонентов.
В диалоговом окне Параметры компонентов авторизации выберите Выбрать настраиваемый поставщик авторизации , чтобы включить авторизацию ПО FTP настраиваемым поставщиком. В соответствующем раскрывающемся списке выберите из списка настраиваемый поставщик.
Примечание
Если пользовательский поставщик авторизации FTP включен, функция правил авторизации FTP отключена.
Нажмите кнопку ОК.
Конфигурация
Атрибуты
Отсутствует.
Дочерние элементы
| Элемент | Описание |
|---|---|
provider |
Необязательный элемент. Указывает настраиваемый поставщик авторизации. |
Образец конфигурации
В следующем примере отображается <customAuthorization> элемент :
<ftpServer>
<security>
<customAuthorization>
<provider name="MyProvider" enabled="true" />
</customAuthorization>
</security>
</ftpServer>
В следующем примере отображается < элемент providerDefinitions> для настраиваемого поставщика авторизации в предыдущем примере:
<system.ftpServer>
<providerDefinitions>
<add name="MyProvider" type="MyProvider, MyProvider, version=1.0.0.0, Culture=neutral, PublicKeyToken=426f62526f636b73" />
</providerDefinitions>
</system.ftpServer>
Пример кода
В приведенных ниже примерах кода настраиваемого поставщика авторизации настраиваемого поставщика авторизации.
AppCmd.exe
appcmd.exe set config -section:system.applicationHost/sites /[name='MyFTPSite'].ftpServer.security.customAuthorization.provider.name:"MyProvider" /commit:apphost
appcmd.exe set config -section:system.applicationHost/sites /[name='MyFTPSite'].ftpServer.security.customAuthorization.provider.enabled:"True" /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 sitesSection = config.GetSection("system.applicationHost/sites");
ConfigurationElementCollection sitesCollection = sitesSection.GetCollection();
ConfigurationElement siteElement = FindElement(sitesCollection, "site", "name", @"MyFTPSite");
if (siteElement == null) throw new InvalidOperationException("Element not found!");
ConfigurationElement ftpServerElement = siteElement.GetChildElement("ftpServer");
ConfigurationElement securityElement = ftpServerElement.GetChildElement("security");
ConfigurationElement customAuthorizationElement = securityElement.GetChildElement("customAuthorization");
ConfigurationElement providerElement = customAuthorizationElement.GetChildElement("provider");
providerElement["name"] = @"MyProvider";
providerElement["enabled"] = true;
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 sitesSection As ConfigurationSection = config.GetSection("system.applicationHost/sites")
Dim sitesCollection As ConfigurationElementCollection = sitesSection.GetCollection
Dim siteElement As ConfigurationElement = FindElement(sitesCollection, "site", "name", "MyFTPSite")
If (siteElement Is Nothing) Then
Throw New InvalidOperationException("Element not found!")
End If
Dim ftpServerElement As ConfigurationElement = siteElement.GetChildElement("ftpServer")
Dim securityElement As ConfigurationElement = ftpServerElement.GetChildElement("security")
Dim customAuthorizationElement As ConfigurationElement = securityElement.GetChildElement("customAuthorization")
Dim providerElement As ConfigurationElement = customAuthorizationElement.GetChildElement("provider")
providerElement("name") = "MyProvider"
providerElement("enabled") = true
serverManager.CommitChanges
End Sub
Private Shared Function FindElement(ByVal collection As ConfigurationElementCollection, ByVal elementTagName As String, ParamArray ByVal 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 = 0
Do While (i < keyValues.Length)
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
i = (i + 2)
Loop
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 sitesSection = adminManager.GetAdminSection("system.applicationHost/sites", "MACHINE/WEBROOT/APPHOST");
var sitesCollection = sitesSection.Collection;
var siteElementPos = FindElement(sitesCollection, "site", ["name", "MyFTPSite"]);
if (siteElementPos == -1) throw "Element not found!";
var siteElement = sitesCollection.Item(siteElementPos);
var ftpServerElement = siteElement.ChildElements.Item("ftpServer");
var securityElement = ftpServerElement.ChildElements.Item("security");
var customAuthorizationElement = securityElement.ChildElements.Item("customAuthorization");
var providerElement = customAuthorizationElement.ChildElements.Item("provider");
providerElement.Properties.Item("name").Value = "MyProvider";
providerElement.Properties.Item("enabled").Value = true;
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 = CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"
Set sitesSection = adminManager.GetAdminSection("system.applicationHost/sites", "MACHINE/WEBROOT/APPHOST")
Set sitesCollection = sitesSection.Collection
siteElementPos = FindElement(sitesCollection, "site", Array ("name", "MyFTP"))
if (siteElementPos = -1) THEN throw "Element not found!"
Set siteElement = sitesCollection.Item(siteElementPos)
Set ftpServerElement = siteElement.ChildElements.Item("ftpServer")
Set securityElement = ftpServerElement.ChildElements.Item("security")
Set customAuthorizationElement = securityElement.ChildElements.Item("customAuthorization")
Set providerElement = customAuthorizationElement.ChildElements.Item("provider")
providerElement.Properties.Item("name").Value = "MyProvider1"
providerElement.Properties.Item("enabled").Value = true
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
PowerShell
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -filter "system.applicationHost/sites/site[@name='MyFTPSite']/ftpServer/security/customAuthorization/provider" -name "name" -value "MyProvider"
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -filter "system.applicationHost/sites/site[@name='MyFTPSite']/ftpServer/security/customAuthorization/provider" -name "enabled" -value "True"