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
屬性值設定為 “Days”、“Hours”、“Minutes”、“Seconds” 或 “Milliseconds”。 如果未指定屬性,則預設值為 “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 中部署沙箱元件,並以 (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 屬性為 true , ActiveDirectoryMembershipProvider 實例一律會連線到具有網域 PDC 角色的伺服器,以確保密碼變更生效,並在呼叫 方法時 ValidateUser 可用。使用 ADAM 時不允許此連線字串,而且會擲回 NotSupportedException。 |
<LDAP:// domain 或 server>:[port]/<container dn> ADAM 的埠號碼是選擇性的,而且 Active Directory 不需要。 |
提供者會針對指定的網域或伺服器執行。 使用者建立和刪除只會在指定的容器中完成。 所有其他作業,包括任何搜尋方法,都會在容器上執行根目錄的子樹搜尋。 若為ADAM伺服器,容器會指定應用程式分割區的根目錄,或應用程式分割區內的容器。 我們建議連接字串定義特定的容器,以改善效能。 |
實例會將 ActiveDirectoryMembershipProvider 目錄屬性對應至 ActiveDirectoryMembershipUser 屬性。 如果未在 Web.config 檔案中完成任何屬性對應,則會使用預設屬性。 如需屬性對應的詳細資訊,請參閱類別檔中的 ActiveDirectoryMembershipUser 個別屬性。
下表列出 ActiveDirectoryMembershipUser 屬性及其預設屬性對應。
重要
類別 ActiveDirectoryMembershipProvider 不會明確檢查提供者屬性是否未對應至目錄中用戶物件的核心屬性。 您必須確定目錄中的敏感性資訊不會透過對應的屬性公開。
屬性 | 預設目錄屬性 | 可以對應嗎? |
---|---|---|
ProviderUserKey | securityIdentifier | No |
UserName | userPrincipalName | 是,但必須是 userPrincipalName 或 sAMAccountName |
Comment | comment | No |
CreationDate | whenCreated | No |
電子郵件 | 是,但必須是 Unicode String 類型的單一值屬性。 | |
LastActivityDate | n/a | ActiveDirectoryMembershipProvider 不支援。 |
LastLoginDate | n/a | ActiveDirectoryMembershipProvider 不支援。 |
LastPasswordChangedDate | pwdLastSet | 否 |
PasswordQuestion | 無 | 是,但必須是 Unicode String 類型的單一值屬性。 |
IsApproved | 用戶帳戶控制 (AD) mDS-UserAccountDisabled (ADAM) |
No |
IsLockedOut | 從 lockoutTime 和 WINDOWS 2000) 上的 AD 鎖定持續時間計算 (AD msDS-User-Account-Control-Computed (AD on Windows Server 2003) msDS-User-Account-Control-Computed (ADAM) |
No |
LastLockoutDate | 如果使用者因為密碼嘗試太多而遭到鎖定,則會傳回鎖定時間屬性。 如果使用者因為密碼回應嘗試太多而遭到鎖定,則會傳回儲存在 所定義 attributeMapFailedPasswordAnswerLockoutTime 屬性中的值。如果使用者因為密碼錯誤和密碼嘗試太多而遭到鎖定,則會傳回最新的日期/時間值。 如果帳戶未鎖定,請傳回 1/1/1754 以取得 SQL 相容性。 |
No |
RequiresQuestionAndAnswer當和 EnablePasswordReset 屬性都是 true
時,類別ActiveDirectoryMembershipProvider會要求使用者回答預先決定的問題,以支援密碼重設安全性。 若要支援問題和解答,您必須使用應用程式組態檔中成員資格的 add 元素來設定下列組態屬性 (ASP.NET 設定架構架構) 。
組態屬性 | 屬性類型 |
---|---|
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 來明確設定 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 安裝目錄中可用檔案的 MS-User.ldf
LDIF 匯入匯入類別。
類別 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) |