ActiveDirectoryMembershipProvider 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
为 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 实例的 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>
clientSearchTimeout
和 serverSearchTimeout
默认为分钟。 若要更改单位,请将 timeoutUnit
属性值设置为“天”、“小时”、“分钟”、“秒”或“毫秒”之一。 如果未指定属性,则默认值为“Minutes”。
注解
此类由 Membership 和 MembershipUser 类用于为使用 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 | 否 |
是,但必须是 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 类通过要求用户回答预先确定的问题来支持密码重置安全性。 若要支持问题和答案,必须使用应用程序配置文件中的 成员资格提供程序的 add Element (ASP.NET 设置架构) 来设置以下配置属性。
配置属性 | 属性类型 |
---|---|
attributeMapPasswordQuestion |
必须是 Unicode String 类型的单值属性。 |
attributeMapPasswordAnswer |
必须是 Unicode String 类型的单值属性。 |
attributeMapFailedPasswordAnswerCount |
必须是 Integer 类型的单值属性。 |
attributeMapFailedPasswordAnswerTime |
必须是类型为“大整数/间隔”的单值属性。 |
attributeMapFailedPasswordAnswerLockoutTime |
必须是类型为“大整数/间隔”的单值属性。 |
有关使用密码重置安全性的详细信息,请参阅 RequiresQuestionAndAnswer 属性。
Active Directory 连接
ActiveDirectoryMembershipProvider当 类用于连接到 Active Directory 或 Active Directory 应用程序模式 (ADAM) 服务器时,connectionProtection
使用应用程序配置文件中成员资格 (ASP.NET 设置架构) 的 add Element 设置架构) 设置的属性可能会限制类可以通过连接执行的操作类型ActiveDirectoryMembershipProvider。 属性 connectionProtection
还确定实例将用于创建与 Active Directory 或 ADAM 服务器的连接的方法 ActiveDirectoryMembershipProvider 。
下表显示了 连接到 Active Directory 时 属性的效果 connectionProtection
。
connectionProtection 设置 |
效果 |
---|---|
None | 类 ActiveDirectoryMembershipProvider 将连接到 Active Directory,但存在这些限制。 - 设置密码的任何方法都将失败。 更改密码时,Active Directory 需要安全连接。 - 必须使用应用程序配置文件中成员资格 (ASP.NET 设置架构) 提供程序的 add Element 显式设置 connectionUsername 和 connectionPassword 属性;否则,ActiveDirectoryMembershipProvider实例将引发ProviderException异常。 |
Secure |
类 ActiveDirectoryMembershipProvider 将尝试使用 SSL 连接到 Active Directory。 如果 SSL 失败,将再次尝试使用 sign-and-seal 连接到 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 数据存储区检索用户密码。 此属性始终返回 |
EnableSearchMethods |
获取一个值,该值指示面向搜索的 ActiveDirectoryMembershipProvider 方法是否可用。 |
MaxInvalidPasswordAttempts |
获取用户回答密码重置问题时允许失败的次数。 |
MinRequiredNonAlphanumericCharacters |
获取有效密码中必须包含的最少特殊字符数。 |
MinRequiredPasswordLength |
获取密码所需的最小长度。 |
Name |
获得一个友好名称,用于在配置过程中引用提供程序。 (继承自 ProviderBase) |
PasswordAnswerAttemptLockoutDuration |
获取用户多次未能正确回答密码提示问题后用户帐户的锁定时间长度。 |
PasswordAttemptWindow |
获取时间长度,在该时间间隔内对提供有效密码或密码答案的连续失败尝试次数进行跟踪。 |
PasswordFormat |
获取一个值,该值指示 Active Directory 数据存储区中的密码的格式。 |
PasswordStrengthRegularExpression |
获取用于计算密码的正则表达式。 |
RequiresQuestionAndAnswer |
获取一个值,该值指示成员资格提供程序是否配置为要求在创建用户时提供密码提示问题和答案。 |
RequiresUniqueEmail |
获取一个值,该值指示 Active Directory 服务器中存储的电子邮件地址是否必须是唯一的。 |
方法
事件
ValidatingPassword |
在创建了用户、更改了密码或重置了密码时发生。 (继承自 MembershipProvider) |