Freigeben über


Beispiel für eine Rollenanbieterimplementierung

Aktualisiert: November 2007

Beschreibt den Beispielrollenanbieter und das unterstützte Datenquellenschema.

Die folgenden Themen enthalten den Code für die Implementierung eines Beispielrollenanbieters. 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.

Das Thema beschreibt, wie Sie den Beispielprofilanbieter implementieren 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. Aus diesem Grund sollten Sie einen für die verwendete Datenquelle spezifischen Rollenanbieter erstellen (z. B. SybaseProfileProvider oder OracleProfileProvider), auch wenn Sie mit dem .NET Framework-Datenanbieter für ODBC oder dem .NET Framework-Datenanbieter für OLEDB auf Ihre Datenquelle zugreifen.

Den Code für den Beispielanbieter finden Sie unter Gewusst wie: Beispiel für eine Rollenanbieterimplementierung.

Datenbankschema

Der Beispielanbieter verwendet zwei Datenbanktabellen, um die Rolleninformation zu verwalten: eine Roles-Tabelle mit Rollen- und Anwendungsnamen und eine UsersInRoles-Tabelle, in der die Benutzernamen den anwendungsspezifischen Rollennamen zugeordnet werden.

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

CREATE TABLE Roles
(
  Rolename Text (255) NOT NULL,
  ApplicationName Text (255) NOT NULL,
    CONSTRAINT PKRoles PRIMARY KEY (Rolename, ApplicationName)
)

CREATE TABLE UsersInRoles
(
  Username Text (255) NOT NULL,
  Rolename Text (255) NOT NULL,
  ApplicationName Text (255) NOT NULL,
    CONSTRAINT PKUsersInRoles PRIMARY KEY (Username, Rolename, ApplicationName)
)

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 die Source-Eigenschaft als Ereignisquelle für Ereignisse von "OdbcRoleProvider" 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\OdbcRoleProvider

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:OdbcRoleProvider.dll /t:library OdbcRoleProvider.vb /r:System.Web.dll /r:System.Configuration.dll
csc /out:OdbcRoleProvider.dll /t:library OdbcRoleProvider.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. Im Beispiel wird eine ODBC-DSN mit dem Namen "RolesDSN" zum Ermitteln der Verbindungsinformationen für die Access-Datenbank verwendet. Zum Verwenden des Beispielanbieters müssen Sie entweder die System-DSN "RolesDSN" erstellen oder eine gültige ODBC-Verbindungszeichenfolge für Ihre Datenbank angeben.

Diese Beispielkonfiguration setzt voraus, dass Ihre Website die Formularauthentifizierung verwendet und zusätzlich über eine ASP.NET-Seite mit dem Namen login.aspx verfügt, über die sich die Benutzer anmelden können.

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

  <system.web>
    <authentication mode="Forms" />
      <forms loginUrl="loginvb.aspx"
        name=".ASPXFORMSAUTH" />
    </authentication>

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

    <roleManager defaultProvider="OdbcRoleProvider" 
      enabled="true"
      cacheRolesInCookie="true"
      cookieName=".ASPROLES"
      cookieTimeout="30"
      cookiePath="/"
      cookieRequireSSL="false"
      cookieSlidingExpiration="true"
      cookieProtection="All" >
      <providers>
        <clear />
        <add
          name="OdbcRoleProvider"
          type="Samples.AspNet.Roles.OdbcRoleProvider"
          connectionStringName="OdbcServices" 
          applicationName="SampleApplication" 
          writeExceptionsToEventLog="false" />
      </providers>
    </roleManager>

  </system.web>
</configuration>

Siehe auch

Konzepte

Implementieren eines Rollenanbieters

Weitere Ressourcen

Verwalten der Autorisierung mithilfe von Rollen

Sichern von ASP.NET-Websites