ActiveDirectoryMembershipProvider 类

定义

为 Active Directory 和 Active Directory 应用程序模式服务器中的 ASP.NET 应用程序管理成员资格信息的存储。

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

示例

以下代码示例演示配置为使用 ActiveDirectoryMembershipProvider 实例的 ASP.NET 应用程序的 Web.config 文件。 第一个示例使用 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>  

clientSearchTimeoutserverSearchTimeout 默认为分钟。 若要更改单位,请将 timeoutUnit 属性值设置为“天”、“小时”、“分钟”、“秒”或“毫秒”之一。 如果未指定属性,则默认值为“Minutes”。

注解

此类由 MembershipMembershipUser 类用于为使用 Active Directory (AD) 或 Active Directory 应用程序模式 (ADAM) 服务器的 ASP.NET 应用程序提供成员身份服务。

注意

使用 ADAM 服务器需要特定的配置。 有关详细信息,请参阅下面的 ADAM 配置部分。

重要

实例 ActiveDirectoryMembershipProvider 仅适用于 ASP.NET 的完全信任策略默认配置。 若要在任何部分信任级别使用该 ActiveDirectoryMembershipProvider 实例,必须更改应用程序的相应信任策略文件,或者必须创建在 GAC 中部署的“沙盒”程序集。

ActiveDirectoryMembershipProvider 需要不受限制 DirectoryServicesPermission 的权限才能运行。 此权限不会添加到随 ASP.NET 提供的任何部分信任策略文件。 尽管向 DirectoryServicesPermission 部分信任策略文件添加权限将允许使用 ActiveDirectoryMembershipProvider 类,但这样做会使 System.DirectoryServices 命名空间类可用于 ASP.NET 页中运行的任何代码。 对于需要在安全锁定模式下运行的任何 Web 服务器,不建议使用此选项。

或者,可以创建调用 类的 ActiveDirectoryMembershipProvider “沙盒”程序集。 此程序集可以包含将方法调用转发到 ActiveDirectoryMembershipProvider 类的包装类或派生自 类的 ActiveDirectoryMembershipProvider 类。 在任一情况下,包装类都必须断言不受限制 DirectoryServicesPermission 的权限。 在 GAC 中部署沙盒程序集,并使用 AllowPartiallyTrustedCallersAttribute (APTCA) 属性标记程序集。 这将使部分受信任的 ASP.NET 代码能够调用包装类,并且由于包装类在内部断言不受限制 DirectoryServicesPermission 的权限,因此包装类将能够成功调用提供程序

必须在标识要使用的 Active Directory 服务器、Active Directory 域或 ADAM 应用程序分区的 Web.config 文件中创建 connectionStrings 元素 (ASP.NET 设置架构 ) 条目。 提供程序仅在域范围或域内的子作用域中运行。 下表列出了允许的连接字符串和使用的范围。

连接字符串 范围
<LDAP:// domain 或 server>:[port]

ADAM 的端口号是可选的,Active Directory 不需要端口号。
提供程序针对指定的域或服务器运行。 使用 AD 时,用户创建和删除在默认用户容器中完成。 所有其他操作(包括任何搜索方法)将根植于域的默认命名上下文中。

如果连接字符串指定 Active Directory 域而不是特定服务器,并且 EnablePasswordReset 属性为 true,则 ActiveDirectoryMembershipProvider 实例将始终连接到具有域的 PDC 角色的服务器,以确保密码更改生效并在调用 方法时 ValidateUser 可用。

使用 ADAM 时,不允许使用此连接字符串,并将引发 NotSupportedException
<LDAP:// 域或服务器>:[port]/<container dn>

ADAM 的端口号是可选的,Active Directory 不需要端口号。
提供程序针对指定的域或服务器运行。 用户创建和删除仅在指定的容器中完成。 所有其他操作(包括任何搜索方法)执行在容器上根目录的子树搜索。

对于 ADAM 服务器,容器指定应用程序分区的根,或应用程序分区中的容器。

建议连接字符串定义特定的容器以提高性能。

实例将 ActiveDirectoryMembershipProvider 目录属性映射到 ActiveDirectoryMembershipUser 属性。 如果在 Web.config 文件中未执行任何属性映射,则使用默认属性。 有关属性映射的详细信息,请参阅类文档中的各个 ActiveDirectoryMembershipUser 属性。

下表列出了 ActiveDirectoryMembershipUser 属性及其默认属性映射。

重要

ActiveDirectoryMembershipProvider不显式检查提供程序属性未映射到目录中用户对象的核心属性。 必须确保目录中的敏感信息不会通过映射属性公开。

properties 默认目录属性 是否可以映射?
ProviderUserKey securityIdentifier
UserName userPrincipalName 是,但必须是 userPrincipalName 或 sAMAccountName
Comment comment
CreationDate whenCreated
Email mail 是,但必须是 Unicode String 类型的单值属性。
LastActivityDate 不适用 不受 ActiveDirectoryMembershipProvider 支持。
LastLoginDate 不适用 不受 ActiveDirectoryMembershipProvider 支持。
LastPasswordChangedDate pwdLastSet
PasswordQuestion 是,但必须是 Unicode String 类型的单值属性。
IsApproved User-Account-Control (AD)

mDS-UserAccountDisabled (ADAM)
IsLockedOut 根据 Windows 2000 上的 lockoutTime 和 AD 锁定持续时间计算 (AD)

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

msDS-User-Account-Control-Computed (ADAM)
LastLockoutDate 如果用户因密码错误尝试次数过多而被锁定,则返回锁定时间属性。

如果用户因密码答案错误尝试次数过多而被锁定,则返回存储在 由 attributeMapFailedPasswordAnswerLockoutTime 定义的 属性中的值。

如果用户由于密码错误和密码尝试错误而被锁定,则返回最新的日期/时间值。

如果帐户未锁定,则返回 1/1/1754,以保持 SQL 兼容性。

当 和 EnablePasswordReset 属性均为 RequiresQuestionAndAnswertrue时,ActiveDirectoryMembershipProvider类通过要求用户回答预先确定的问题来支持密码重置安全性。 若要支持问题和答案,必须使用应用程序配置文件中成员 资格 (ASP.NET 设置架构) 的 add Element for provider 来设置以下配置属性。

配置属性 属性类型
attributeMapPasswordQuestion 必须是 Unicode String 类型的单值属性。
attributeMapPasswordAnswer 必须是 Unicode String 类型的单值属性。
attributeMapFailedPasswordAnswerCount 必须是 Integer 类型的单值属性。
attributeMapFailedPasswordAnswerTime 必须是类型为“大整数/间隔”的单值属性。
attributeMapFailedPasswordAnswerLockoutTime 必须是类型为“大整数/间隔”的单值属性。

有关使用密码重置安全性的详细信息,请参阅 RequiresQuestionAndAnswer 属性。

Active Directory 连接

ActiveDirectoryMembershipProvider当 类用于连接到 Active Directory 或 Active Directory 应用程序模式 (ADAM) 服务器时,connectionProtection使用应用程序配置文件中成员资格 (ASP.NET 设置架构) 的 add 元素设置的属性可能会限制类可以通过连接执行的操作类型ActiveDirectoryMembershipProvider。 属性 connectionProtection 还确定实例将用于创建与 Active Directory 或 ADAM 服务器的连接的方法 ActiveDirectoryMembershipProvider

下表显示了 连接到 Active Directory 时 特性的效果 connectionProtection

connectionProtection 设置 效果
None ActiveDirectoryMembershipProvider 将连接到 Active Directory,但存在这些限制。

- 任何设置密码的方法都将失败。 更改密码时,Active Directory 需要安全连接。
- 必须使用为应用程序配置文件中的成员资格 (ASP.NET 设置架构) 提供程序添加元素显式设置 connectionUsernameconnectionPassword 属性;否则,ActiveDirectoryMembershipProvider实例将引发ProviderException异常。
Secure ActiveDirectoryMembershipProvider 将尝试使用 SSL 连接到 Active Directory。 如果 SSL 失败,将再次尝试使用签名和密封连接到 Active Directory。 如果两次尝试都失败,实例 ActiveDirectoryMembershipProvider 将引发 ProviderException 异常。

支持进程凭据和显式凭据。

下表显示了 连接到 ADAM 服务器时 特性的效果 connectionProtection

connectionProtection 设置 效果
None ActiveDirectoryMembershipProvider 将连接到 ADAM 服务器,但存在此限制。

- 除非显式配置 ADAM 服务器以允许通过不安全的连接发送和更改密码,否则任何设置密码的方法都将失败。

支持进程凭据和显式凭据。
Secure ActiveDirectoryMembershipProvider 将尝试使用 SSL 连接到 ADAM 服务器。 如果无法建立连接,实例 ActiveDirectoryMembershipProvider 将引发 ProviderException 异常。

支持进程凭据和显式凭据。

ADAM 配置

使用 ADAM 服务器时,ADAM 实例必须包含定义 类的 User 架构。 可以使用 User ADAM 安装目录中可用文件的 LDIF 导入来导入 MS-User.ldf 类。

ActiveDirectoryMembershipProvider 将适用于配置为使用默认网络端口的 ADAM 服务器。 下表显示了 ADAM 服务器的预期默认值。

connectionProtection 设置 预期的 ADAM 端口
None 389
Secure 636

构造函数

ActiveDirectoryMembershipProvider()

创建 ActiveDirectoryMembershipProvider 类的新实例。

属性

ApplicationName

使用自定义成员资格提供程序的应用程序的名称。

CurrentConnectionProtection

获取用于保护与服务器的通信的当前安全级别。

Description

获取一条简短的易懂描述,它适合在管理工具或其他用户界面 (UI) 中显示。

(继承自 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[])

对密码进行加密。

(继承自 MembershipProvider)
EncryptPassword(Byte[], MembershipPasswordCompatibilityMode)

使用指定的密码兼容性模式对指定密码进行加密。

(继承自 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)

适用于

另请参阅