Freigeben über


Beispiel für eine Mitgliedschaftsanbieterimplementierung

Aktualisiert: November 2007

Beschreibt die Mitgliedschafts-Beispielanbieter und das jeweils unterstützte Datenquellenschema.

Die folgenden Themen beinhalten den Code für eine Implementierung von Beispielmitgliedschaftsanbietern. Der Beispielanbieter verwendet den .NET Framework-Datenanbieter für ODBC, um sich mit einer ODBC-Datenquelle zu verbinden. Für das Beispiel wird eine Access-Datenbank als Datenquelle verwendet.

In diesem Thema werden Einzelheiten zur Implementierung des Beispielmitgliedschaftsanbieters erläutert, und es wird beschrieben, wie Sie das Beispiel erstellen und eine ASP.NET-Anwendung für die Verwendung des Beispielanbieters konfigurieren.

Hinweis:

Weil Datenquellen unterschiedliche SQL-Syntax enthalten, funktionieren einige Befehle zwar mit einer Datenquelle, mit einer anderen hingegen nicht. Entsprechend sollten Sie einen für die verwendete Datenquelle spezifischen Mitgliedschaftsanbieter erstellen (SybaseMembershipProvider, OracleMembershipProvider usw.), auch wenn Sie mit dem .NET Framework-Datenanbieter für ODBC oder dem .NET Framework-Datenanbieter für OLEDB auf Ihre Datenquelle zugreifen.

Es gibt zwei Versionen des Beispielanbieters: eine in Visual Basic und eine in C#. Den Beispielcode finden Sie unter Gewusst wie: Beispiel für eine Mitgliedschaftsanbieterimplementierung.

Datenbankschema

Führen Sie zum Erstellen der Access-Tabelle für den Beispielanbieter die folgende Datendefinitionsabfrage in einer neuen oder bestehenden Access-Datenbank aus.

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
)

Zugriff auf das Ereignisprotokoll

Wenn der Beispielanbieter beim Zugreifen auf die Datenquelle eine Ausnahme ermittelt, werden die Einzelheiten der Ausnahme nicht an die ASP.NET-Anwendung zurückgegeben, sondern in das Ereignisprotokoll der Anwendung geschrieben. Hierbei handelt es sich um eine Sicherheitsmaßnahme, die verhindern soll, dass vertrauliche Informationen über die Datenquelle für die ASP.NET-Anwendung zugänglich sind.

Der Beispielanbieter gibt für Ereignisse die Source-Eigenschaft als Ereignisquelle "OdbcMembershipProvider" an. Damit eine ASP.NET-Anwendung erfolgreich in das Ereignisprotokoll der Anwendung schreiben kann, müssen Sie den folgenden Registrierungsschlüssel erstellen.

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

Wenn Sie nicht möchten, dass der Beispielanbieter Ausnahmen in das Ereignisprotokoll schreibt, können sie das writeExceptionsToEventLog-Attribut in der Datei Web.config auf false festlegen.

Erstellen des Beispielanbieters

Um den Beispielanbieter zu verwenden, fügen Sie den Quellcode in das Verzeichnis App_Code der Anwendung ein. Wenn sich bereits Quellcode im Verzeichnis App_Code der Anwendung befindet, müssen Sie die Version des Beispielanbieters hinzufügen, die in der gleichen Sprache wie der vorhandene Code im Verzeichnis geschrieben ist. Der Anbieter wird von ASP.NET kompiliert, wenn die Anwendung angefordert wird.

Sie können auch den Beispielanbieter als Bibliothek kompilieren und ins Verzeichnis Bin Ihrer Webanwendung einfügen bzw. ihn stark benennen und in den globalen Zugriffscache einfügen. Mit folgendem Befehl wird der Beispielanbieter vom Befehlszeilencompiler kompiliert.

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

Verwenden des Beispielanbieters in einer ASP.NET-Anwendung

Das folgende Beispiel zeigt die Datei Web.config einer ASP.NET-Anwendung, die für die Verwendung des Beispielanbieters konfiguriert ist. Bei der Konfigurationsdatei wird davon ausgegangen, dass zwei Dateien vorhanden sind, CreateUser.aspx und RetrievePassword.aspx. Beide Dateien sind für alle Benutzer zugänglich, auch für diejenigen, die angemeldet sind.

Im Beispiel wird eine ODBC-DSN mit dem Namen "MembershipUsers" zum Ermitteln der Verbindungsinformationen für die Access-Datenbank verwendet. Zum Verwenden des Beispielanbieters müssen Sie entweder die System-DSN "MembershipUsers" erstellen oder eine gültige ODBC-Verbindungszeichenfolge für Ihre Datenbank angeben.

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

Siehe auch

Konzepte

Implementieren eines Mitgliedschaftsanbieters

Weitere Ressourcen

Verwalten von Benutzern durch Mitgliedschaft