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 屬性值設定為 「Days」、「Hours」、「Minutes」、「Seconds」 或 「Milliseconds」。 如果未指定屬性,則預設值為 「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 中部署沙箱元件,並以 (APTCA) 屬性標記元件 AllowPartiallyTrustedCallersAttribute 。 這可讓您的部分信任 ASP.NET 程式碼呼叫包裝函式類別,而且因為包裝函式類別在內部判斷提示不受限制 DirectoryServicesPermission 的許可權,所以包裝函式類別將能夠成功呼叫提供者

您必須在Web.config檔案中建立 connectionStrings 元素 (ASP.NET 設定架構) 專案,以識別要使用的 Active Directory 伺服器、Active Directory 網域或 ADAM 應用程式分割區。 提供者只會在網域範圍或網域內的子範圍內運作。 下表列出允許的連接字串和所使用的範圍。

連接字串 影響範圍
<LDAP:// domain 或 server > :[port]

ADAM 的埠號碼是選擇性的,而且 Active Directory 不需要。
提供者會針對指定的網域或伺服器執行。 使用 AD 時,會在預設使用者容器中完成使用者建立和刪除。 所有其他作業,包括任何搜尋方法,都會以網域的預設命名內容為根。

如果連接字串指定 Active Directory 網域,而不是特定伺服器,而且 EnablePasswordReset 屬性為 trueActiveDirectoryMembershipProvider 實例一律會連線到具有網域 PDC 角色的伺服器,以確保密碼變更生效,並在呼叫 方法時 ValidateUser 可用。

使用 ADAM 時不允許此連接字串,而且會擲回 NotSupportedException
<LDAP:// domain 或 server > :[port]/ < container dn>

ADAM 的埠號碼是選擇性的,而且 Active Directory 不需要。
提供者會針對指定的網域或伺服器執行。 使用者建立和刪除只會在指定的容器中完成。 所有其他作業,包括任何搜尋方法,都會在容器上執行根目錄的子樹搜尋。

若為 ADAM 伺服器,容器會指定應用程式分割區的根目錄,或應用程式分割區內的容器。

我們建議連接字串定義特定的容器,以改善效能。

實例會將 ActiveDirectoryMembershipProvider 目錄屬性對應至 ActiveDirectoryMembershipUser 屬性。 如果未在Web.config檔案中完成任何屬性對應,則會使用預設屬性。 如需屬性對應的詳細資訊,請參閱類別檔中的 ActiveDirectoryMembershipUser 個別屬性。

下表列出 ActiveDirectoryMembershipUser 屬性及其預設屬性對應。

重要

類別 ActiveDirectoryMembershipProvider 不會明確檢查提供者屬性未對應至目錄中使用者物件的核心屬性。 您必須確定目錄中的敏感性資訊不會透過對應的屬性公開。

屬性 預設目錄屬性 可以對應嗎?
ProviderUserKey securityIdentifier
UserName userPrincipalName 是,但必須是 userPrincipalName 或 sAMAccountName
Comment comment
CreationDate whenCreated
Email mail 是,但必須是 Unicode String 類型的單一值屬性。
LastActivityDate n/a ActiveDirectoryMembershipProvider 不支援。
LastLoginDate n/a ActiveDirectoryMembershipProvider 不支援。
LastPasswordChangedDate pwdLastSet
PasswordQuestion 是,但必須是 Unicode String 類型的單一值屬性。
IsApproved 使用者帳戶控制 (AD)

mDS-UserAccountDisabled (ADAM)
IsLockedOut 從 lockoutTime 和 Windows 2000 () AD 上的 AD 鎖定持續時間計算

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

msDS-User-Account-Control-Computed (ADAM)
LastLockoutDate 如果使用者因為密碼嘗試太多而遭到鎖定,則會傳回鎖定時間屬性。

如果使用者因為密碼回應嘗試太多而遭到鎖定,則會傳回儲存在 所 attributeMapFailedPasswordAnswerLockoutTime 定義屬性中的值。

如果使用者因為密碼錯誤和太多錯誤的密碼嘗試而遭到鎖定,則會傳回最新的日期/時間值。

如果帳戶未鎖定,請傳回 1/1/1754 以取得 SQL 相容性。

當 和 EnablePasswordReset 屬性都是 RequiresQuestionAndAnswertrue 時,類別 ActiveDirectoryMembershipProvider 會要求使用者回答預先決定的問題,以支援密碼重設安全性。 若要支援問題和答案,您必須使用應用程式組態檔中 成員資格 (ASP.NET 設定架構) 提供者的 add 元素 來設定下列組態屬性。

組態屬性 屬性類型
attributeMapPasswordQuestion 必須是 Unicode 字串類型的單一值屬性。
attributeMapPasswordAnswer 必須是 Unicode 字串類型的單一值屬性。
attributeMapFailedPasswordAnswerCount 必須是 Integer 類型的單一值屬性。
attributeMapFailedPasswordAnswerTime 必須是大型整數/間隔類型的單一值屬性。
attributeMapFailedPasswordAnswerLockoutTime 必須是大型整數/間隔類型的單一值屬性。

如需使用密碼重設安全性的詳細資訊,請參閱 RequiresQuestionAndAnswer 屬性。

Active Directory 連線

ActiveDirectoryMembershipProvider當類別用來連線到 Active Directory 或 Active Directory 應用程式模式 (ADAM) 伺服器時, connectionProtection 針對應用程式組態檔中成員資格 (ASP.NET 設定架構) 提供者新增元素所設定的屬性,可能會限制類別可以透過連線執行的作業 ActiveDirectoryMembershipProvider 類型。 屬性 connectionProtection 也會決定實例將用來建立 Active Directory 或 ADAM 伺服器連線的方法 ActiveDirectoryMembershipProvider

下表顯示連接到 Active Directory 時屬性的效果 connectionProtection

connectionProtection 設定 效果
None 類別 ActiveDirectoryMembershipProvider 會連線到 Active Directory,並具有這些限制。

- 任何設定密碼的方法都會失敗。 變更密碼時,Active Directory 需要安全連線。
- 您必須針對應用程式組態檔中的成員資格 (ASP.NET 設定架構) ,使用 add Element 來明確設定 connectionUsernameconnectionPassword 屬性;否則, 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 資料存放區擷取使用者的密碼。 這個屬性永遠會傳回 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)

適用於

另請參閱