Vorgehensweise: Verwenden des ASP.NET-Mitgliedschaftsanbieters

Der ASP.NET-Mitgliedschaftsanbieter ist eine Funktion für ASP.NET-Entwickler*innen zum Erstellen von Websites, mit denen die Benutzer*innen eindeutige Kombinationen aus Benutzername und Kennwort erstellen können. Jeder Benutzer kann damit ein Konto auf dieser Site erstellen und sich für den exklusiven Zugriff auf diese Site und ihre Dienste anmelden. Dies steht im Gegensatz zur Windows-Sicherheit, bei der die Benutzer über Konten in einer Windows-Domäne verfügen müssen. Stattdessen kann jede*r Benutzer*in, die bzw. der seine Anmeldeinformationen (eine Kombination aus Benutzername/Kennwort) angibt, die Website und deren Dienste nutzen.

Eine Beispielanwendung finden Sie unter Mitgliedschafts- und Rollenanbieter. Informationen zur Verwendung des Features ASP.NET Rollenanbieter finden Sie unter Vorgehensweise: Verwenden des ASP.NET-Rollenanbieters mit einem Dienst.

Die Mitgliedschaftsfunktion setzt die Verwendung einer SQL Server-Datenbank zum Speichern der Benutzerdaten voraus. Die Funktion schließt auch Methoden zum Anzeigen einer Frage für Benutzer ein, die ihr Kennwort vergessen haben.

Windows Communication Foundation (WCF)-Entwickler können diese Features für Sicherheitszwecke nutzen. Wenn sie in eine WCF-Anwendung integriert ist, müssen Benutzer*innen eine Kombination aus Benutzername/Kennwort für die WCF-Clientanwendung bereitstellen. Damit die Daten an den WCF-Dienst übertragen werden, müssen Sie eine Bindung verwenden, die die Anmeldeinformationen aus Benutzername und Kennwort unterstützt wie die WSHttpBinding (in der Konfiguration ist das die <wsHttpBinding>), und den Clientanmeldetyp auf UserName festlegen. Die WCF-Sicherheit des Diensts authentifiziert den Benutzer bzw. die Benutzerin basierend auf Benutzername und Kennwort und weist die von der ASP.NET-Rolle angegebene Rolle zu.

Hinweis

WCF stellt keine Methoden bereit, um die Datenbank mit Kombinationen aus Benutzername und Kennwort oder anderen Benutzerdaten zu füllen.

So konfigurieren Sie den Mitgliedschaftsanbieter

  1. Erstellen Sie in der Web.config-Datei unter dem <system.web>-Element ein <membership>-Element.

  2. Erstellen Sie unter dem <membership>-Element ein <providers>-Element.

  3. Fügen Sie als untergeordnetes Element zum <providers>-Element ein <clear />-Element hinzu, um die Sammlung von Anbietern zu leeren.

  4. Erstellen Sie unter dem <clear />-Element ein <add>-Element mit den folgenden Attributen, die auf geeignete Werte festgelegt sind: name, type, connectionStringName, applicationName, enablePasswordRetrieval, enablePasswordReset, requiresQuestionAndAnswer, requiresUniqueEmail und passwordFormat. Das name-Attribut wird später als Wert in der Konfigurationsdatei verwendet. Im folgenden Beispiel wird das Attribut auf den Wert SqlMembershipProvider festgelegt.

    Im folgenden Beispiel wird der Konfigurationsabschnitt angegeben.

    <!-- Configure the Sql Membership Provider -->
    <membership defaultProvider="SqlMembershipProvider" userIsOnlineTimeWindow="15">
      <providers>
        <clear />
          <add
            name="SqlMembershipProvider"
            type="System.Web.Security.SqlMembershipProvider"
            connectionStringName="SqlConn"
            applicationName="MembershipAndRoleProviderSample"
            enablePasswordRetrieval="false"
            enablePasswordReset="false"
            requiresQuestionAndAnswer="false"
            requiresUniqueEmail="true"
            passwordFormat="Hashed" />
      </providers>
    </membership>
    

So konfigurieren Sie Dienstsicherheit, die eine Kombination aus Benutzername und Kennwort akzeptiert

  1. Fügen Sie in der Konfigurationsdatei unter dem <system.serviceModel>-Element ein <bindings>-Element hinzu.

  2. Fügen Sie dem Abschnitt für die Bindungen eine <wsHttpBinding>-Datei hinzu. Weitere Informationen zum Erstellen eines WCF-Bindungselements finden Sie unter Vorgehensweise: Angeben einer Dienstbindung in der Konfiguration.

  3. Legen Sie das mode-Attribut des <security>-Elements auf Message fest.

  4. Legen Sie das clientCredentialType-Attribut des <message>-Elements auf UserName fest. Dies gibt an, dass ein Benutzername-Kennwort-Paar als Anmeldeinformationen für den Client verwendet wird.

    Das folgende Beispiel zeigt den Konfigurationscode für die Bindung.

    <system.serviceModel>
    <bindings>
      <wsHttpBinding>
      <!-- Set up a binding that uses UserName as the client credential type -->
        <binding name="MembershipBinding">
          <security mode ="Message">
            <message clientCredentialType ="UserName"/>
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    </system.serviceModel>
    

So konfigurieren Sie einen Dienst für die Verwendung des Mitgliedschaftsanbieters

  1. Fügen Sie dem <system.serviceModel>-Element als untergeordnetes Element ein <behaviors>-Element hinzu.

  2. Fügen Sie dem <behaviors>-Element ein <serviceBehaviors>-Element hinzu.

  3. Fügen Sie ein <behavior>-Element hinzu, und legen Sie das Attribut name auf einen geeigneten Wert fest.

  4. Fügen Sie dem <behavior>-Element ein <serviceCredentials>-Element hinzu.

  5. Fügen Sie dem <serviceCredentials>-Element ein <userNameAuthentication>-Element hinzu.

  6. Legen Sie das userNamePasswordValidationMode-Attribut auf MembershipProvider fest.

    Wichtig

    Wenn der userNamePasswordValidationMode-Wert nicht festgelegt ist, verwendet WCF die Windows-Authentifizierung anstelle des ASP.NET-Mitgliedschaftsanbieters.

  7. Legen Sie das membershipProviderName-Attribut auf den Namen des Anbieters fest (wird beim Hinzufügen des Anbieters im ersten Verfahren in diesem Thema angegeben). Im folgenden Beispiel sehen Sie das <serviceCredentials>-Fragment bis zu diesem Punkt:

    <behaviors>
       <serviceBehaviors>
          <behavior name="MyServiceBehavior">
             <serviceCredentials>
                <userNameAuthentication
                userNamePasswordValidationMode="MembershipProvider"
                membershipProviderName="SqlMembershipProvider" />
             </serviceCredentials>
          </behavior>
       </serviceBehaviors>
    </behaviors>
    

Beispiel

Das folgende Codebeispiel zeigt die Konfiguration für einen Dienst, der die ASP-Mitgliedschaftsfunktion verwendet.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service behaviorConfiguration="MyServiceBehavior" name="Microsoft.Samples.GettingStarted.CalculatorService">
        <endpoint address="http://microsoft.com/WCFservices/Calculator"
          binding="wsHttpBinding" bindingConfiguration="MembershipBinding"
          name="ASPmemberUserName" contract="Microsoft.Samples.GettingStarted.ICalculator" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="MyServiceBehavior">
          <serviceCredentials>
            <userNameAuthentication
              userNamePasswordValidationMode="MembershipProvider"
              membershipProviderName="SqlMembershipProvider" />
          </serviceCredentials>
        </behavior>
          </serviceBehaviors>
    </behaviors>
    <bindings>
      <wsHttpBinding>
        <binding name="MembershipBinding">
          <security mode="Message">
            <message clientCredentialType="UserName" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
  </system.serviceModel>
</configuration>

Siehe auch