Поделиться через


ActiveDirectoryMembershipProvider Класс

Определение

Управляет хранилищем сведений о членстве для приложения ASP.NET на серверах Active Directory и в режиме приложений Active Directory.

public ref class ActiveDirectoryMembershipProvider : System::Web::Security::MembershipProvider
public class ActiveDirectoryMembershipProvider : System.Web.Security.MembershipProvider
type ActiveDirectoryMembershipProvider = class
    inherit MembershipProvider
Public Class ActiveDirectoryMembershipProvider
Inherits MembershipProvider
Наследование
ActiveDirectoryMembershipProvider

Примеры

В следующих примерах кода показан файл Web.config для приложения ASP.NET, настроенного для использования экземпляра ActiveDirectoryMembershipProvider. В первом примере используются сопоставления по умолчанию для атрибутов Active Directory и не поддерживаются безопасность сброса пароля с помощью вопросов и ответов, а также возможность вызова методов поиска. Во втором примере показаны все параметры атрибута, разрешенные для экземпляра ActiveDirectoryMembershipProvider.

Первый пример — это простой файл конфигурации, использующий сопоставления по умолчанию для атрибутов Active Directory.

<configuration>
  <connectionStrings>
    <add name="ADService" connectionString="LDAP://ldapServer/" />
  </connectionStrings>
  <system.web>
    <membership defaultProvider="AspNetActiveDirectoryMembershipProvider">
      <providers>
        <add name="AspNetActiveDirectoryMembershipProvider"
          type="System.Web.Security.ActiveDirectoryMembershipProvider,
          System.Web, Version=2.0.3600, Culture=neutral,
          PublicKeyToken=b03f5f7f11d50a3a" />
      </providers>
    </membership>
  </system.web>
</configuration>

В этом примере показаны все параметры атрибута, доступные для экземпляра ActiveDirectoryMembershipProvider.

<configuration>
  <connectionStrings>
    <add name="ADService" connectionString="LDAP://ldapServer/" />
  </connectionStrings>
  <system.web>
    <membership
      defaultProvider="AspNetActiveDirectoryMembershipProvider">
      <providers>
        <add name="AspNetActiveDirectoryMembershipProvider"
          type="System.Web.Security.ActiveDirectoryMembershipProvider,
          System.Web, Version=1.0.3600, Culture=neutral,
          PublicKeyToken=b03f5f7f11d50a3a"
          connectionStringName="ADService"
          connectionUsername="UserWithAppropriateRights"
          connectionPassword="PasswordForUser"
          connectionProtection="Secure"
          enablePasswordReset="true"
          enableSearchMethods="true"
          requiresQuestionAndAnswer="true"
          applicationName="/"
          description="Default AD connection"
          requiresUniqueEmail="false"
          clientSearchTimeout="30"
          serverSearchTimeout="30"
          timeoutUnit="Minutes"
          attributeMapPasswordQuestion="department"
          attributeMapPasswordAnswer="division"
          attributeMapFailedPasswordAnswerCount="singleIntAttribute"
         attributeMapFailedPasswordAnswerTime="singleLargeIntAttribute"
         attributeMapFailedPasswordAnswerLockoutTime="singleLargeIntAttribute"
          attributeMapEmail = "mail"
          attributeMapUsername = "userPrincipalName"
          maxInvalidPasswordAttempts = "5"
          passwordAttemptWindow = "10"
          passwordAnswerAttemptLockoutDuration = "30"
          minRequiredPasswordLength="7"
          minRequiredNonalphanumericCharacters="1"
          passwordStrengthRegularExpression="
          @\"(?=.{6,})(?=(.*\d){1,})(?=(.*\W){1,})" />
        />
      </providers>
    </membership>
  </system.web>
</configuration>

clientSearchTimeout и serverSearchTimeout по умолчанию в минутах. Чтобы изменить единицы, задайте для значения атрибута timeoutUnit одно из дней, "Часы", "Минуты", "Секунды" или "Миллисекунд". Если атрибут не указан, значение по умолчанию — "Минуты".

Комментарии

Этот класс используется классами Membership и MembershipUser для предоставления служб членства для приложения ASP.NET с помощью сервера Active Directory (AD) или режима приложений Active Directory (ADAM).

Заметка

Для использования сервера ADAM требуется определенная конфигурация. Дополнительные сведения см. в разделе "Конфигурация АДАМ" ниже.

Важный

Экземпляр ActiveDirectoryMembershipProvider работает только в конфигурации политики полного доверия ASP.NET. Чтобы использовать экземпляр ActiveDirectoryMembershipProvider на любом уровне частичного доверия, необходимо внести изменения в соответствующий файл политики доверия для приложения или создать сборку песочницы, развернутую в GAC.

Для выполнения класса ActiveDirectoryMembershipProvider требуется неограниченное DirectoryServicesPermission разрешение. Это разрешение не добавляется ни в один из файлов политики частичного доверия, предоставляемых ASP.NET. Хотя добавление разрешения DirectoryServicesPermission в файл политики частичного доверия позволит использовать класс ActiveDirectoryMembershipProvider, это делает классы пространства имен System.DirectoryServices доступными для любого кода, работающего на ASP.NET страницах. Этот параметр не рекомендуется использовать для веб-серверов, которые должны работать в защищенном, заблокированном режиме.

В качестве альтернативы можно создать сборку песочницы, которая вызывает класс ActiveDirectoryMembershipProvider. Эта сборка может содержать класс-оболочку, который перенаправит вызовы метода в класс ActiveDirectoryMembershipProvider или класс, производный от класса ActiveDirectoryMembershipProvider. В любом случае класс-оболочка должен утверждать неограниченные DirectoryServicesPermission разрешения. Разверните сборку песочницы в GAC и пометьте сборку атрибутом AllowPartiallyTrustedCallersAttribute (APTCA). Это позволит вашему частично доверенному ASP.NET коду вызывать класс оболочки, и так как класс оболочки внутренне утверждает неограниченное разрешение DirectoryServicesPermission, класс-оболочка сможет успешно вызвать поставщика.

Необходимо создать элемент connectionStrings (схема параметров ASP.NET) в файле Web.config, который определяет используемый сервер Active Directory, домен Active Directory или секцию приложения ADAM. Поставщик будет работать только в области домена или в подобласти в домене. В следующей таблице перечислены допустимые строки подключения и используемая область.

Строка подключения Размах
LDAP://<домене или сервере>:[порт]

Номер порта необязателен для ADAM и не требуется для Active Directory.
Поставщик работает с указанным доменом или сервером. При использовании AD создание и удаление пользователей выполняется в контейнере пользователей по умолчанию. Все остальные операции, включая любые методы поиска, будут корневыми в контексте именования по умолчанию для домена.

Если строка подключения указывает домен Active Directory, а не конкретный сервер, а свойство EnablePasswordResettrue, экземпляр ActiveDirectoryMembershipProvider всегда будет подключаться к серверу с ролью PDC для домена, чтобы убедиться, что изменения пароля вступили в силу и доступны при вызове метода ValidateUser.

Эта строка подключения не допускается при использовании ADAM и вызовет NotSupportedException.
LDAP://<домене или сервере>:[порт]/<контейнер dn>

Номер порта необязателен для ADAM и не требуется для Active Directory.
Поставщик работает с указанным доменом или сервером. Создание и удаление пользователей выполняется только в указанном контейнере. Все остальные операции, в том числе любые методы поиска, выполняют поиск поддерев, корневым в контейнере.

Для серверов ADAM контейнер указывает корень секции приложения или контейнер в разделе приложения.

Мы рекомендуем определить конкретный контейнер для повышения производительности строки подключения.

Экземпляр ActiveDirectoryMembershipProvider сопоставляет атрибуты каталога с ActiveDirectoryMembershipUser свойствами. Атрибуты по умолчанию используются, если сопоставление атрибутов не выполняется в файле Web.config. Дополнительные сведения о сопоставлениях атрибутов см. в документации по классам ActiveDirectoryMembershipUser.

В следующей таблице перечислены свойства ActiveDirectoryMembershipUser и сопоставления атрибутов по умолчанию.

Важный

Класс ActiveDirectoryMembershipProvider не проверяет, не сопоставляются ли атрибуты поставщика с основными атрибутами объекта пользователя в каталоге. Необходимо убедиться, что конфиденциальная информация из каталога не предоставляется с помощью сопоставленных атрибутов.

Свойство Атрибут каталога по умолчанию Можно ли сопоставить?
ProviderUserKey securityIdentifier Нет
UserName userPrincipalName Да, но должен быть userPrincipalName или sAMAccountName
Comment комментарий Нет
CreationDate whenCreated Нет
Email почта Да, но должен быть однозначным атрибутом типа Юникод String.
LastActivityDate n/a Не поддерживается ActiveDirectoryMembershipProvider.
LastLoginDate n/a Не поддерживается ActiveDirectoryMembershipProvider.
LastPasswordChangedDate pwdLastSet Нет
PasswordQuestion никакой Да, но должен быть однозначным атрибутом типа Юникод String.
IsApproved ПользовательскаяAccount-Control (AD)

mDS-UserAccountDisabled (ADAM)
Нет
IsLockedOut вычисляется из lockoutTime и длительности блокировки AD (AD в Windows 2000)

msDS-User-Account-Control-Computed (AD в Windows Server 2003)

msDS-User-Account-Control-Computed (ADAM)
Нет
LastLockoutDate Если пользователь заблокирован из-за слишком большого количества неудачных попыток пароля, возвращается атрибут времени блокировки.

Если пользователь заблокирован из-за слишком большого количества неудачных попыток ответа на пароль, возвращается значение, хранящееся в атрибуте, определенном attributeMapFailedPasswordAnswerLockoutTime.

Если пользователь заблокирован из-за неправильного пароля и слишком большого количества неудачных попыток пароля, возвращается последнее значение даты и времени.

Если учетная запись не заблокирована, вернитесь 1/1/1754 для совместимости SQL.
Нет

Если свойства RequiresQuestionAndAnswer и EnablePasswordResettrue, класс ActiveDirectoryMembershipProvider поддерживает безопасность сброса пароля, требуя от пользователя ответить на заданный вопрос. Чтобы поддержать вопрос и ответ, необходимо задать следующие атрибуты конфигурации с помощью добавить элемент для поставщиков для членства (схема параметров ASP.NET) в файле конфигурации приложения.

Атрибут конфигурации Тип атрибута
attributeMapPasswordQuestion Должен быть однозначным атрибутом типа Юникод String.
attributeMapPasswordAnswer Должен быть однозначным атрибутом типа Юникод String.
attributeMapFailedPasswordAnswerCount Должен быть однозначным атрибутом типа Integer.
attributeMapFailedPasswordAnswerTime Должен быть однозначным атрибутом типа Large Integer/Interval.
attributeMapFailedPasswordAnswerLockoutTime Должен быть однозначным атрибутом типа Large Integer/Interval.

Дополнительные сведения об использовании безопасности сброса пароля см. в свойстве RequiresQuestionAndAnswer.

Подключения Active Directory

Если класс ActiveDirectoryMembershipProvider используется для подключения к серверу Active Directory или в режиме приложений Active Directory (ADAM), атрибут connectionProtection, заданный с помощью добавления элемента для поставщиков для членства (схема параметров ASP.NET) в файле конфигурации приложения может ограничить типы операций, которые класс ActiveDirectoryMembershipProvider может выполнять через подключение. Атрибут connectionProtection также определяет методы, которые экземпляр ActiveDirectoryMembershipProvider будет использовать для создания подключения к серверу Active Directory или ADAM.

В следующей таблице показан эффект атрибута connectionProtection при подключении к Active Directory.

параметр connectionProtection Эффект
None Класс ActiveDirectoryMembershipProvider будет подключаться к Active Directory с этими ограничениями.

— Любой метод, который задает пароль, завершится ошибкой. Для Active Directory требуется безопасное подключение при изменении паролей.
— Необходимо явно задать атрибуты connectionUsername и connectionPassword с помощью добавить элемент для поставщиков для членства (схема параметров ASP.NET) в файле конфигурации приложения; В противном случае экземпляр ActiveDirectoryMembershipProvider вызовет исключение ProviderException.
Secure Класс ActiveDirectoryMembershipProvider попытается подключиться к Active Directory с помощью SSL. При сбое SSL будет выполнена вторая попытка подключиться к Active Directory с помощью подписи и печати. Если обе попытки завершаются ошибкой, экземпляр ActiveDirectoryMembershipProvider вызовет исключение ProviderException.

Поддерживаются учетные данные обработки и явные учетные данные.

В следующей таблице показан эффект атрибута connectionProtection при подключении к серверу ADAM.

параметр connectionProtection Эффект
None Класс ActiveDirectoryMembershipProvider будет подключаться к серверу ADAM с этим ограничением.

— Любой метод, который задает пароли, завершится ошибкой, если вы явно не настроите сервер ADAM, чтобы разрешить отправку и изменение паролей через небезопасное подключение.

Поддерживаются учетные данные обработки и явные учетные данные.
Secure Класс ActiveDirectoryMembershipProvider попытается подключиться к серверу ADAM с помощью SSL. Если подключение невозможно сделать, экземпляр ActiveDirectoryMembershipProvider вызовет исключение ProviderException.

Поддерживаются учетные данные обработки и явные учетные данные.

Конфигурация ADAM

При использовании сервера ADAM экземпляр АДАМ должен содержать схему, определяющую класс User. Класс User можно импортировать с помощью импорта LDIF файла MS-User.ldf, доступного в каталоге установки ADAM.

Класс ActiveDirectoryMembershipProvider будет работать с сервером ADAM, настроенным для использования сетевых портов по умолчанию. В следующей таблице показаны значения по умолчанию, ожидаемые для сервера ADAM.

Параметр connectionProtection Ожидаемый порт ADAM
None 389
Secure 636

Конструкторы

ActiveDirectoryMembershipProvider()

Создает новый экземпляр класса ActiveDirectoryMembershipProvider.

Свойства

ApplicationName

Имя приложения с помощью пользовательского поставщика членства.

CurrentConnectionProtection

Возвращает текущий уровень безопасности, используемый для защиты связи с сервером.

Description

Получает краткое понятное описание, подходящее для отображения в средствах администрирования или других пользовательских интерфейсах (UIs).

(Унаследовано от ProviderBase)
EnablePasswordReset

Возвращает значение, указывающее, настроен ли экземпляр ActiveDirectoryMembershipProvider, чтобы пользователи могли сбрасывать пароли.

EnablePasswordRetrieval

Возвращает значение, указывающее, можно ли получить пароль пользователя из хранилища данных Active Directory. Это свойство всегда возвращает false.

EnableSearchMethods

Возвращает значение, указывающее, доступны ли методы ActiveDirectoryMembershipProvider с ориентацией поиска.

MaxInvalidPasswordAttempts

Возвращает количество неудачных попыток ответа, разрешенное пользователю для вопроса сброса пароля.

MinRequiredNonAlphanumericCharacters

Возвращает минимальное количество специальных символов, которые должны присутствовать в допустимом пароле.

MinRequiredPasswordLength

Возвращает минимальную длину, необходимую для пароля.

Name

Возвращает понятное имя, используемое для ссылки на поставщика во время настройки.

(Унаследовано от ProviderBase)
PasswordAnswerAttemptLockoutDuration

Получите продолжительность времени, для которого учетная запись пользователя заблокирована после того, как пользователь выполняет слишком много неудачных попыток ответа на пароль.

PasswordAttemptWindow

Возвращает период времени, в течение которого выполняется последовательная попытка предоставить допустимый пароль или допустимый ответ на пароль.

PasswordFormat

Возвращает значение, указывающее формат паролей в хранилище данных Active Directory.

PasswordStrengthRegularExpression

Возвращает регулярное выражение, используемое для вычисления пароля.

RequiresQuestionAndAnswer

Возвращает значение, указывающее, настроен ли поставщик членства на запрос пароля и ответ при создании пользователя.

RequiresUniqueEmail

Возвращает значение, указывающее, должен ли адрес электронной почты, хранящийся на сервере Active Directory, быть уникальным.

Методы

ChangePassword(String, String, String)

Изменяет пароль для указанного пользователя.

ChangePasswordQuestionAndAnswer(String, String, String, String)

Обновляет вопрос пароля и ответ пользователя в хранилище Active Directory.

CreateUser(String, String, String, String, String, Boolean, Object, MembershipCreateStatus)

Добавляет нового пользователя в хранилище данных Active Directory.

DecryptPassword(Byte[])

Расшифровывает зашифрованный пароль.

(Унаследовано от MembershipProvider)
DeleteUser(String, Boolean)

Удаляет сведения о членстве пользователя из хранилища данных Active Directory.

EncryptPassword(Byte[], MembershipPasswordCompatibilityMode)

Шифрует указанный пароль с помощью указанного режима совместимости паролей.

(Унаследовано от MembershipProvider)
EncryptPassword(Byte[])

Шифрует пароль.

(Унаследовано от MembershipProvider)
Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
FindUsersByEmail(String, Int32, Int32, Int32)

Возвращает коллекцию пользователей членства из хранилища данных Active Directory на основе адреса электронной почты пользователя.

FindUsersByName(String, Int32, Int32, Int32)

Возвращает коллекцию пользователей из хранилища данных Active Directory на основе имени пользователя.

GeneratePassword()

Создает случайный пароль.

GetAllUsers(Int32, Int32, Int32)

Возвращает коллекцию всех пользователей, хранящихся в источнике данных Active Directory.

GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetNumberOfUsersOnline()

Вызывает исключение NotSupportedException во всех случаях.

GetPassword(String, String)

Возвращает пароль указанного пользователя из базы данных. Класс ActiveDirectoryMembershipProvider не поддерживает этот метод.

GetType()

Возвращает Type текущего экземпляра.

(Унаследовано от Object)
GetUser(Object, Boolean)

Возвращает сведения о пользователе членства, связанные с указанным ключом пользователя.

GetUser(String, Boolean)

Возвращает сведения о пользователе членства, связанные с указанным именем пользователя.

GetUserNameByEmail(String)

Возвращает имя пользователя, связанное с указанным адресом электронной почты.

Initialize(String, NameValueCollection)

Инициализирует экземпляр ActiveDirectoryMembershipProvider со значениями свойств из файлов конфигурации приложения. Этот метод не предназначен для вызова из кода.

MemberwiseClone()

Создает неглубокую копию текущей Object.

(Унаследовано от Object)
OnValidatingPassword(ValidatePasswordEventArgs)

Вызывает событие ValidatingPassword, если был определен обработчик событий.

(Унаследовано от MembershipProvider)
ResetPassword(String, String)

Сбрасывает пароль пользователя на новый автоматически созданный пароль.

ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)
UnlockUser(String)

Очищает блокировку, чтобы пользователь членства можно было проверить.

UpdateUser(MembershipUser)

Обновляет сведения о пользователе в хранилище данных Active Directory.

ValidateUser(String, String)

Проверяет, существует ли указанное имя пользователя и пароль в хранилище данных Active Directory.

События

ValidatingPassword

Происходит при создании пользователя, изменении пароля или сбросе пароля.

(Унаследовано от MembershipProvider)

Применяется к

См. также раздел