ActiveDirectoryMembershipProvider Classe

Definizione

Gestisce l'archiviazione delle informazioni di appartenenza per un'applicazione ASP.NET nei server Active Directory e Active Directory Application Mode.

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

Negli esempi di codice seguenti viene illustrato il file Web.config per un'applicazione ASP.NET configurata per l'uso di un'istanza ActiveDirectoryMembershipProvider di . Il primo esempio usa i mapping predefiniti per gli attributi di Active Directory e non supporta la sicurezza per la reimpostazione della password con domande e risposte né la possibilità di chiamare i metodi di ricerca. Il secondo esempio mostra tutte le impostazioni dell'attributo consentite per un'istanza ActiveDirectoryMembershipProvider di .

Il primo esempio è un file di configurazione semplice che usa i mapping predefiniti per gli attributi di 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>  

Questo esempio mostra tutte le impostazioni degli attributi disponibili per un'istanza di 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 e serverSearchTimeout il valore predefinito è minuti. Per modificare le unità, impostare il valore dell'attributo timeoutUnit su uno di "Days", "Hours", "Minutes", "Seconds" o "Milliseconds". Se l'attributo non viene specificato, il valore predefinito è "Minutes".

Commenti

Questa classe viene utilizzata 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).

Nota

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 a qualsiasi livello di attendibilità parziale, è necessario apportare modifiche al file dei criteri di attendibilità appropriato per l'applicazione ActiveDirectoryMembershipProvider oppure 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 forniti con ASP.NET. Anche se l'aggiunta dell'autorizzazione DirectoryServicesPermission a un file di criteri parzialmente attendibile 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 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 ActiveDirectoryMembershipProvider classe o a 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 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 vengano applicate e siano disponibili quando viene chiamato il ValidateUser metodo .

Questa stringa di connessione non è consentita quando si usa ADAM e genera 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 definiscano 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 nel file di Web.config non viene eseguito alcun mapping di attributi. Per altre informazioni sui mapping degli attributi, vedere le singole proprietà nella documentazione della ActiveDirectoryMembershipUser classe.

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

Importante

La ActiveDirectoryMembershipProvider classe non controlla in modo esplicito che gli attributi del provider non vengano 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 comment No
CreationDate whenCreated No
Email mail Sì, ma deve essere un attributo a valore singolo di tipo Unicode String.
LastActivityDate n/d Non supportato da ActiveDirectoryMembershipProvider.
LastLoginDate n/d Non supportato da ActiveDirectoryMembershipProvider.
LastPasswordChangedDate pwdLastSet No
PasswordQuestion Nessuno Sì, ma deve essere un attributo a valore singolo di tipo Unicode String.
IsApproved Controllo account utente (AD)

mDS-UserAccountDisabled (ADAM)
No
IsLockedOut calcolata da lockoutTime e durata del blocco di ACTIVE (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 password non valido, 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à SQL.
No

Quando entrambe le RequiresQuestionAndAnswer proprietà e EnablePasswordReset sono true, la ActiveDirectoryMembershipProvider classe supporta la sicurezza di 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'attributo add Element for provider for membership (ASP.NET Settings Schema) 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 di reimpostazione della password, vedere la RequiresQuestionAndAnswer proprietà.

Connessioni active Directory

Quando la ActiveDirectoryMembershipProvider classe viene usata per connettersi a un server Active Directory o a un server di modalità applicazione Active Directory (ADAM), l'attributo connectionProtection impostato usando l'elemento add per i provider per l'appartenenza (ASP.NET Settings Schema) 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 ActiveDirectoryMembershipProvider che l'istanza userà per creare la connessione al server Active Directory o ADAM.

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

Impostazione di 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 (ASP.NET Schema impostazioni) nel file di configurazione dell'applicazione. In caso contrario, l'istanza ActiveDirectoryMembershipProvider genererà un'eccezione ProviderException .
Secure La ActiveDirectoryMembershipProvider classe tenterà di connettersi ad Active Directory usando SSL. Se SSL ha esito negativo, verrà eseguito un secondo tentativo di connessione ad Active Directory usando la firma e il sigillo. 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 connectionProtection durante la connessione a un server ADAM.

Impostazione di 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 configura in modo esplicito il server ADAM per consentire l'invio e la modifica delle password su 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 effettuare 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 usare le 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

ActiveDirectoryMembershipProvider()

Crea una nuova istanza della classe ActiveDirectoryMembershipProvider.

Proprietà

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 di facile comprensione che è possibile visualizzare in strumenti di amministrazione o in altre interfacce utente (UI, User Interface).

(Ereditato da ProviderBase)
EnablePasswordReset

Ottiene un valore che indica se l'istanza della classe ActiveDirectoryMembershipProvider è configurato in modo da consentire agli utenti di reimpostare le loro password.

EnablePasswordRetrieval

Ottiene un valore indicante se la password utente può essere recuperata dall'archivio dati di Active Directory. Questa proprietà restituisce sempre false.

EnableSearchMethods

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

MaxInvalidPasswordAttempts

Ottiene il numero di tentativi con risposta alla password non valida 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 richiesta per una password.

Name

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

(Ereditato da ProviderBase)
PasswordAnswerAttemptLockoutDuration

Ottiene l'intervallo di tempo durante il quale un account utente è bloccato dopo che l'utente ha effettuato un numero eccessivo di tentativi di risposta per la password.

PasswordAttemptWindow

Ottiene l'intervallo di tempo in cui vengono registrati i tentativi consecutivi non riusciti di fornire una password o una risposta per la password valida.

PasswordFormat

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

PasswordStrengthRegularExpression

Ottiene l'espressione regolare usata per valutare una password.

RequiresQuestionAndAnswer

Ottiene un valore che indica se il provider di appartenenze è configurato in modo da richiedere agli utenti una domanda e una risposta per la password al momento della creazione di un utente.

RequiresUniqueEmail

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

Metodi

ChangePassword(String, String, String)

Modifica la password per l'utente specificato.

ChangePasswordQuestionAndAnswer(String, String, String, String)

Aggiorna la domanda e la risposta relative alla password di un utente nell'archivio 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[])

Crittografa una password.

(Ereditato da MembershipProvider)
EncryptPassword(Byte[], MembershipPasswordCompatibilityMode)

Crittografa la password specificata utilizzando la modalità di compatibilità della password specificata.

(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 un insieme di utenti dall'archivio dati di Active Directory in base al nome utente.

GeneratePassword()

Genera una password casuale.

GetAllUsers(Int32, Int32, Int32)

Ottiene l'insieme di tutti gli utenti archiviati in un archivio 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 dal database la password dell'utente specificato. La classe ActiveDirectoryMembershipProvider non supporta questo metodo.

GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
GetUser(Object, Boolean)

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

GetUser(String, Boolean)

Ottiene le informazioni sull'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 della classe ActiveDirectoryMembershipProvider con i valori di proprietà ottenuti dai file di configurazione dell'applicazione. Questo metodo non è destinato a essere chiamato dal codice dell'utente.

MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

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

Annulla un blocco in modo da consentire la convalida di un utente di appartenenza.

UpdateUser(MembershipUser)

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

ValidateUser(String, String)

Verifica che nome utente e password specificati esistano nell'origine dati di Active Directory.

Eventi

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