Share via


Implementazione di un provider di appartenenze di esempio

Aggiornamento: novembre 2007

Viene fornita la descrizione dei provider di appartenenze di esempio e degli schemi dell'origine dati supportati.

Negli argomenti riportati di seguito viene fornito il codice relativo all'implementazione di un provider di appartenenze di esempio. In questo esempio vengono utilizzati il provider di dati .NET Framework per ODBC per la connessione a un'origine dati ODBC e un database Access come origine dati.

In questo argomento vengono illustrati i dettagli di implementazione relativi al provider di appartenenze di esempio e viene descritto come generare l'esempio e configurare un'applicazione ASP.NET per l'utilizzo del provider di esempio.

Nota:

Poiché le origini dati contengono una sintassi SQL differente, alcuni comandi funzioneranno con una specifica origine dati ma non con un'altra. È quindi necessario creare un provider di appartenenze specifico per l'origine dati, ad esempio SybaseMembershipProvider o OracleMembershipProvider, anche se per l'accesso all'origine dati si sta utilizzando il provider di dati .NET Framework per ODBC o per OLEDB.

Vengono fornite due versioni del provider di esempio, una in Visual Basic e l'altra in C#. Il codice di esempio è disponibile in Procedura: implementazione di un provider di appartenenze di esempio.

Schema del database

Per creare la tabella Access utilizzata dal provider di esempio, eseguire la seguente query di definizione dei dati in un nuovo database Access o in uno esistente.

CREATE TABLE Users
(
  PKID Guid NOT NULL PRIMARY KEY,
  Username Text (255) NOT NULL,
  ApplicationName Text (255) NOT NULL,
  Email Text (128) NOT NULL,
  Comment Text (255),
  Password Text (128) NOT NULL,
  PasswordQuestion Text (255),
  PasswordAnswer Text (255),
  IsApproved YesNo, 
  LastActivityDate DateTime,
  LastLoginDate DateTime,
  LastPasswordChangedDate DateTime,
  CreationDate DateTime, 
  IsOnLine YesNo,
  IsLockedOut YesNo,
  LastLockedOutDate DateTime,
  FailedPasswordAttemptCount Integer,
  FailedPasswordAttemptWindowStart DateTime,
  FailedPasswordAnswerAttemptCount Integer,
  FailedPasswordAnswerAttemptWindowStart DateTime
)

Accesso al log eventi

Se durante l'utilizzo dell'origine dati il provider di esempio rileva un'eccezione, anziché restituirla all'applicazione ASP.NET scrive i relativi dettagli nel log eventi dell'applicazione. Si tratta di una misura di protezione per impedire che nell'applicazione ASP.NET vengano esposte informazioni private relative all'origine dati.

Il provider di esempio specifica "OdbcMembershipProvider" come Source degli eventi. Affinché l'applicazione ASP.NET possa scrivere correttamente nel log eventi dell'applicazione è necessario creare la seguente chiave del Registro di sistema.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\OdbcMembershipProvider

Se non si desidera che il provider di esempio scriva le eccezioni nel log eventi, è possibile impostare l'attributo writeExceptionsToEventLog su false nel file Web.config.

Generazione del provider di esempio

Per poter utilizzare il provider di esempio, è necessario inserire il codice sorgente nella directory App_Code dell'applicazione. Se nella directory App_Code dell'applicazione esiste già del codice sorgente, è necessario aggiungere la versione del provider di esempio scritta nello stesso linguaggio del codice esistente nella directory. Quando verrà richiesta l'applicazione, il provider verrà compilato da ASP.NET.

In alternativa, è possibile compilare il provider di esempio come libreria e inserirlo nella directory Bin dell'applicazione Web oppure assegnare un nome sicuro al provider e inserirlo nella Global Assembly Cache (GAC). Il seguente comando mostra come compilare il provider di esempio mediante il compilatore della riga di comando.

vbc /out:OdbcMembershipProvider.dll /t:library OdbcMembershipProvider.vb /r:System.Web.dll /r:System.Configuration.dll
csc /out:OdbcMembershipProvider.dll /t:library OdbcMembershipProvider.cs /r:System.Web.dll /r:System.Configuration.dll

Utilizzo del provider di esempio in un'applicazione ASP.NET

Nell'esempio riportato di seguito viene illustrato il file Web.config per un'applicazione ASP.NET configurata per l'utilizzo del provider di esempio. Nel file di configurazione si presuppone che siano presenti due file, CreateUser.aspx e RetrievePassword.aspx. Questi file devono essere accessibili a tutti gli utenti, anche a quelli connessi.

Nell'esempio viene utilizzato un nome origine dati ODBC "MembershipUsers" per ottenere le informazioni di connessione relative al database Access. Per utilizzare il provider di esempio, sarà necessario creare il nome origine dati di sistema "MembershipUsers" oppure fornire una stringa di connessione ODBC valida per il database.

<configuration>

  <location path="CreateUser.aspx">
    <system.web>
      <authorization>
        <allow users="?" />
      </authorization>
    </system.web>
  </location>
  <location path="RetrievePassword.aspx">
    <system.web>
      <authorization>
        <allow users="?" />
      </authorization>
    </system.web>
  </location>

  <connectionStrings>
    <add name="OdbcServices" connectionString="DSN=MembershipUsers;" />
  </connectionStrings>

  <system.web>

    <authentication mode="Forms" >
      <forms loginUrl="login.aspx"
        name=".ASPXFORMSAUTH" />
    </authentication>

    <authorization>
      <deny users="?" />
    </authorization>

    <machineKey
      validationKey="C50B3C89CB21F4F1422FF158A5B42D0E8DB8CB5CDA1742572A487D9401E3400267682B202B746511891C1BAF47F8D25C07F6C39A104696DB51F17C529AD3CABE" 
      decryptionKey="8A9BE8FD67AF6979E7D20198CFEA50DD3D3799C77AF2B72F"
      validation="SHA1" />

    <membership defaultProvider="OdbcProvider" userIsOnlineTimeWindow="15">

      <providers>

        <add 
          name="OdbcProvider" 
          type="Samples.AspNet.Membership.OdbcMembershipProvider" 
          connectionStringName="OdbcServices"
          enablePasswordRetrieval="true"
          enablePasswordReset="true"
          requiresQuestionAndAnswer="true" 
          writeExceptionsToEventLog="true" />

      </providers>
    </membership>

  </system.web>
</configuration>

Vedere anche

Concetti

Implementazione di un provider di appartenenze

Altre risorse

Gestione di utenti tramite l'appartenenza