Condividi tramite


ActiveDirectoryMembershipProvider Classe

Definizione

Gestisce l'archiviazione delle informazioni sull'appartenenza per un'applicazione ASP.NET nei server Active Directory e in modalità applicazione 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
Ereditarietà
ActiveDirectoryMembershipProvider

Esempio

Nell'esempio seguente viene illustrato il file Web.config per un'applicazione ASP.NET configurata per l'uso di un'istanza ActiveDirectoryMembershipProvider di . Usa i mapping predefiniti per gli attributi di Active Directory. Non supporta la sicurezza per la reimpostazione della password con domande e risposte o la possibilità di chiamare metodi di ricerca.

<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>

Commenti

Questa classe viene usata dalle Membership classi e MembershipUser per fornire servizi di appartenenza per un'applicazione ASP.NET tramite un server Active Directory (AD) o active Directory Application Mode (ADAM).

Annotazioni

L'uso di un server ADAM richiede una configurazione specifica. Per altre informazioni, vedere la sezione Configurazione ADAM di seguito.

Importante

L'istanza ActiveDirectoryMembershipProvider funziona solo nella configurazione predefinita dei criteri di attendibilità totale di ASP.NET. Per usare l'istanza ActiveDirectoryMembershipProvider a qualsiasi livello di attendibilità parziale, è necessario apportare modifiche al file dei criteri di attendibilità appropriato per l'applicazione oppure è necessario creare un assembly "sandbox" distribuito nella GAC.

La ActiveDirectoryMembershipProvider classe richiede l'autorizzazione senza restrizioni DirectoryServicesPermission per l'esecuzione. Questa autorizzazione non viene aggiunta ad alcun file di criteri parzialmente attendibile fornito con ASP.NET. Anche se l'aggiunta dell'autorizzazione DirectoryServicesPermission a un file di criteri di attendibilità parziale consentirà l'uso della ActiveDirectoryMembershipProvider classe , in questo modo le System.DirectoryServices classi dello spazio dei nomi saranno disponibili per qualsiasi codice in esecuzione nelle pagine di ASP.NET. Questa opzione non è consigliata per tutti i server Web che devono essere eseguiti in modalità protetta e bloccata.

In alternativa, è possibile creare un assembly "sandbox" che chiama la ActiveDirectoryMembershipProvider classe . Questo assembly può contenere una classe wrapper che inoltra le chiamate al metodo alla classe o a ActiveDirectoryMembershipProvider una classe che deriva dalla ActiveDirectoryMembershipProvider classe . In entrambi i casi, la classe wrapper deve asserire l'autorizzazione senza restrizioni DirectoryServicesPermission . Distribuire l'assembly sandbox nella GAC e contrassegnare l'assembly con l'attributo AllowPartiallyTrustedCallersAttribute (APTCA). Ciò consentirà al codice di ASP.NET parzialmente attendibile di chiamare la classe wrapper e poiché la classe wrapper asserisce internamente l'autorizzazione senza restrizioni DirectoryServicesPermission , la classe wrapper sarà in grado di chiamare correttamente il provider

È necessario creare una voce connectionStrings Element (ASP.NET Settings Schema) nel file Web.config che identifica il server Active Directory, il dominio Active Directory o la partizione dell'applicazione ADAM da usare. Il provider funzionerà solo nell'ambito del dominio o in un ambito secondario all'interno di un dominio. Nella tabella seguente sono elencate le stringhe di connessione consentite e l'ambito usato.

Stringa di connessione Ambito
<LDAP:// dominio o server>:[porta]

Il numero di porta è facoltativo per ADAM e non è necessario per Active Directory.
Il provider viene eseguito sul dominio o sul server specificato. Con AD, la creazione e l'eliminazione degli utenti viene eseguita nel contenitore utenti predefinito. Tutte le altre operazioni, inclusi i metodi di ricerca, verranno radicate nel contesto di denominazione predefinito per il dominio.

Se la stringa di connessione specifica un dominio di Active Directory anziché un server specifico e la EnablePasswordReset proprietà è true, l'istanza ActiveDirectoryMembershipProvider si connetterà sempre al server con il ruolo PDC per il dominio per garantire che le modifiche della password siano effettive e siano disponibili quando viene chiamato il ValidateUser metodo .

Questa stringa di connessione non è consentita quando si usa ADAM e genererà un'eccezione NotSupportedException.
<LDAP:// domain o server>:[port]/<container dn>

Il numero di porta è facoltativo per ADAM e non è necessario per Active Directory.
Il provider viene eseguito sul dominio o sul server specificato. La creazione e l'eliminazione dell'utente vengono eseguite solo nel contenitore specificato. Tutte le altre operazioni, inclusi i metodi di ricerca, eseguono ricerche nel sottoalbero rooted nel contenitore.

Per i server ADAM, il contenitore specifica la radice di una partizione dell'applicazione o un contenitore all'interno di una partizione dell'applicazione.

È consigliabile che la stringa di connessione definisci un contenitore specifico per migliorare le prestazioni.

L'istanza esegue il ActiveDirectoryMembershipProvider mapping degli attributi della directory alle ActiveDirectoryMembershipUser proprietà. Gli attributi predefiniti vengono usati se non viene eseguito alcun mapping di attributi nel file Web.config. Per altre informazioni sui mapping degli attributi, vedere le singole proprietà nella documentazione della ActiveDirectoryMembershipUser classe.

Nella tabella seguente sono elencate le ActiveDirectoryMembershipUser proprietà e i relativi mapping di attributi predefiniti.

Importante

La ActiveDirectoryMembershipProvider classe non verifica in modo esplicito che gli attributi del provider non siano mappati agli attributi principali dell'oggetto utente nella directory. È necessario assicurarsi che le informazioni riservate dalla directory non vengano esposte tramite attributi mappati.

Proprietà Attributo directory predefinito È possibile eseguire il mapping?
ProviderUserKey securityIdentifier No
UserName userPrincipalName Sì, ma deve essere userPrincipalName o sAMAccountName
Comment commento No
CreationDate whenCreated No
Email posta elettronica Sì, ma deve essere un attributo a valore singolo di tipo Unicode String.
LastActivityDate Non disponibile Non supportato da ActiveDirectoryMembershipProvider.
LastLoginDate Non disponibile Non supportato da ActiveDirectoryMembershipProvider.
LastPasswordChangedDate pwdLastSet No
PasswordQuestion none Sì, ma deve essere un attributo a valore singolo di tipo Unicode String.
IsApproved User-Account-Control (AD)

mDS-UserAccountDisabled (ADAM)
No
IsLockedOut calcolato da lockoutTime e dalla durata del blocco di AD (AD in Windows 2000)

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

msDS-User-Account-Control-Computed (ADAM)
No
LastLockoutDate Se l'utente è bloccato a causa di troppi tentativi di password non valido, viene restituito l'attributo di tempo di blocco.

Se l'utente è bloccato a causa di troppi tentativi di risposta alla password non valida, viene restituito il valore archiviato nell'attributo definito da attributeMapFailedPasswordAnswerLockoutTime .

Se l'utente è bloccato a causa di una password non valida e di troppi tentativi di password non valido, viene restituito il valore di data/ora più recente.

Se l'account non è bloccato, restituire 1/1/1754 per la compatibilità di SQL.
No

Quando entrambe le RequiresQuestionAndAnswer proprietà e EnablePasswordReset sono true, la ActiveDirectoryMembershipProvider classe supporta la sicurezza per la reimpostazione della password richiedendo all'utente di rispondere a una domanda predeterminata. Per supportare la domanda e la risposta, è necessario impostare gli attributi di configurazione seguenti usando l'elemento add per i provider per l'appartenenza (schema delle impostazioni ASP.NET) nel file di configurazione dell'applicazione.

Attributo di configurazione Tipo di attributo
attributeMapPasswordQuestion Deve essere un attributo a valore singolo di tipo Unicode String.
attributeMapPasswordAnswer Deve essere un attributo a valore singolo di tipo Unicode String.
attributeMapFailedPasswordAnswerCount Deve essere un attributo a valore singolo di tipo Integer.
attributeMapFailedPasswordAnswerTime Deve essere un attributo a valore singolo di tipo Large Integer/Interval.
attributeMapFailedPasswordAnswerLockoutTime Deve essere un attributo a valore singolo di tipo Large Integer/Interval.

Per altre informazioni sull'uso della sicurezza per la reimpostazione della password, vedere la RequiresQuestionAndAnswer proprietà .

Connessioni Active Directory

Quando la ActiveDirectoryMembershipProvider classe viene usata per connettersi a un server Active Directory o ad active Directory Application Mode (ADAM), l'attributo impostato usando l'elemento connectionProtectionadd per i provider per l'appartenenza (schema delle impostazioni ASP.NET) nel file di configurazione dell'applicazione può limitare i tipi di operazioni che la ActiveDirectoryMembershipProvider classe può eseguire sulla connessione. L'attributo connectionProtection determina anche i metodi che l'istanza ActiveDirectoryMembershipProvider userà per creare la connessione al server Active Directory o ADAM.

Nella tabella seguente viene illustrato l'effetto dell'attributo durante la connectionProtection connessione a un'istanza di Active Directory.

impostazione connectionProtection Effetto
None La ActiveDirectoryMembershipProvider classe si connetterà a un'istanza di Active Directory, con queste restrizioni.

- Qualsiasi metodo che imposta una password avrà esito negativo. Active Directory richiede una connessione sicura quando si modificano le password.
- È necessario impostare in modo esplicito gli connectionUsername attributi e connectionPassword usando l'elemento add per i provider per l'appartenenza (schema delle impostazioni ASP.NET) nel file di configurazione dell'applicazione. In caso contrario, l'istanza genererà un'eccezione ActiveDirectoryMembershipProviderProviderException .
Secure La ActiveDirectoryMembershipProvider classe tenterà di connettersi ad Active Directory tramite SSL. Se SSL ha esito negativo, verrà eseguito un secondo tentativo di connessione ad Active Directory tramite il segno e il seal. Se entrambi i tentativi hanno esito negativo, l'istanza genererà un'eccezione ActiveDirectoryMembershipProviderProviderException .

Sono supportate sia le credenziali di processo che le credenziali esplicite.

Nella tabella seguente viene illustrato l'effetto dell'attributo durante la connectionProtection connessione a un server ADAM.

impostazione connectionProtection Effetto
None La ActiveDirectoryMembershipProvider classe si connetterà a un server ADAM, con questa restrizione.

- Qualsiasi metodo che imposta le password avrà esito negativo a meno che non si configuri in modo esplicito il server ADAM per consentire l'invio e la modifica delle password in una connessione non sicura.

Sono supportate sia le credenziali di processo che le credenziali esplicite.
Secure La ActiveDirectoryMembershipProvider classe tenterà di connettersi al server ADAM usando SSL. Se non è possibile stabilire una connessione, l'istanza genererà un'eccezione ActiveDirectoryMembershipProviderProviderException .

Sono supportate sia le credenziali di processo che le credenziali esplicite.

Configurazione ADAM

Quando si usa un server ADAM, l'istanza di ADAM deve contenere uno schema che definisce la User classe . È possibile importare la User classe con un'importazione LDIF del MS-User.ldf file disponibile nella directory di installazione di ADAM.

La ActiveDirectoryMembershipProvider classe funzionerà con un server ADAM configurato per l'uso delle porte di rete predefinite. La tabella seguente mostra le impostazioni predefinite previste per il server ADAM.

impostazione connectionProtection Porta ADAM prevista
None 389
Secure 636

Costruttori

Nome Descrizione
ActiveDirectoryMembershipProvider()

Crea una nuova istanza della ActiveDirectoryMembershipProvider classe .

Proprietà

Nome Descrizione
ApplicationName

Nome dell'applicazione che usa il provider di appartenenze personalizzato.

CurrentConnectionProtection

Ottiene il livello di sicurezza corrente utilizzato per proteggere le comunicazioni con il server.

Description

Ottiene una breve descrizione descrittiva adatta per la visualizzazione negli strumenti di amministrazione o in altre interfacce utente.

(Ereditato da ProviderBase)
EnablePasswordReset

Ottiene un valore che indica se l'istanza ActiveDirectoryMembershipProvider è configurata per consentire agli utenti di reimpostare le password.

EnablePasswordRetrieval

Ottiene un valore che indica se la password dell'utente può essere recuperata dall'archivio dati di Active Directory. Questa proprietà restituisce falsesempre .

EnableSearchMethods

Ottiene un valore che indica se sono disponibili metodi orientati alla ActiveDirectoryMembershipProvider ricerca.

MaxInvalidPasswordAttempts

Ottiene il numero di tentativi di risposta non riusciti consentiti a un utente per la domanda di reimpostazione della password.

MinRequiredNonAlphanumericCharacters

Ottiene il numero minimo di caratteri speciali che devono essere presenti in una password valida.

MinRequiredPasswordLength

Ottiene la lunghezza minima necessaria per una password.

Name

Ottiene il nome descrittivo utilizzato per fare riferimento al provider durante la configurazione.

(Ereditato da ProviderBase)
PasswordAnswerAttemptLockoutDuration

Ottenere il periodo di tempo per il quale un account utente viene bloccato dopo che l'utente effettua troppi tentativi di risposta password non valida.

PasswordAttemptWindow

Ottiene l'intervallo di tempo durante il quale vengono rilevati tentativi consecutivi non riusciti di fornire una password valida o una risposta password valida.

PasswordFormat

Ottiene un valore che indica il formato delle password nell'archivio dati di Active Directory.

PasswordStrengthRegularExpression

Ottiene l'espressione regolare utilizzata per valutare una password.

RequiresQuestionAndAnswer

Ottiene un valore che indica se il provider di appartenenze è configurato per richiedere una domanda e una risposta alla password durante la creazione di un utente.

RequiresUniqueEmail

Ottiene un valore che indica se un indirizzo di posta elettronica archiviato nel server Active Directory deve essere univoco.

Metodi

Nome Descrizione
ChangePassword(String, String, String)

Modifica la password per l'utente specificato.

ChangePasswordQuestionAndAnswer(String, String, String, String)

Aggiorna la domanda e la risposta della password per un utente nell'archivio di Active Directory.

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

Aggiunge un nuovo utente all'archivio dati di Active Directory.

DecryptPassword(Byte[])

Decrittografa una password crittografata.

(Ereditato da MembershipProvider)
DeleteUser(String, Boolean)

Rimuove le informazioni di appartenenza di un utente dall'archivio dati di Active Directory.

EncryptPassword(Byte[], MembershipPasswordCompatibilityMode)

Crittografa la password specificata usando la modalità di compatibilità password specificata.

(Ereditato da MembershipProvider)
EncryptPassword(Byte[])

Crittografa una password.

(Ereditato da MembershipProvider)
Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
FindUsersByEmail(String, Int32, Int32, Int32)

Restituisce una raccolta di utenti di appartenenza dall'archivio dati di Active Directory in base all'indirizzo di posta elettronica dell'utente.

FindUsersByName(String, Int32, Int32, Int32)

Restituisce una raccolta di utenti dall'archivio dati di Active Directory in base al nome utente.

GeneratePassword()

Genera una password casuale.

GetAllUsers(Int32, Int32, Int32)

Ottiene una raccolta di tutti gli utenti archiviati in un'origine dati di Active Directory.

GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetNumberOfUsersOnline()

Genera un'eccezione NotSupportedException in tutti i casi.

GetPassword(String, String)

Restituisce la password dell'utente specificato dal database. La ActiveDirectoryMembershipProvider classe non supporta questo metodo.

GetType()

Ottiene il Type dell'istanza corrente.

(Ereditato da Object)
GetUser(Object, Boolean)

Ottiene le informazioni dell'utente di appartenenza associate alla chiave utente specificata.

GetUser(String, Boolean)

Ottiene le informazioni dell'utente di appartenenza associate al nome utente specificato.

GetUserNameByEmail(String)

Ottiene il nome utente associato all'indirizzo di posta elettronica specificato.

Initialize(String, NameValueCollection)

Inizializza l'istanza ActiveDirectoryMembershipProvider con i valori delle proprietà dai file di configurazione dell'applicazione. Questo metodo non deve essere chiamato dal codice.

MemberwiseClone()

Crea una copia superficiale del Objectcorrente.

(Ereditato da Object)
OnValidatingPassword(ValidatePasswordEventArgs)

Genera l'evento ValidatingPassword se è stato definito un gestore eventi.

(Ereditato da MembershipProvider)
ResetPassword(String, String)

Reimposta la password di un utente su una nuova password generata automaticamente.

ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)
UnlockUser(String)

Cancella un blocco in modo che un utente di appartenenza possa essere convalidato.

UpdateUser(MembershipUser)

Aggiorna le informazioni su un utente nell'archivio dati di Active Directory.

ValidateUser(String, String)

Verifica che il nome utente e la password specificati esistano nell'archivio dati di Active Directory.

Eventi

Nome Descrizione
ValidatingPassword

Si verifica quando viene creato un utente, viene modificata una password o viene reimpostata una password.

(Ereditato da MembershipProvider)

Si applica a

Vedi anche