Mitgliedschafts- und RollenanbieterMembership and Role Provider

Im Beispiel zum Mitgliedschafts- und Rollenanbieter wird veranschaulicht, wie ein Dienst mithilfe der ASP.NETASP.NET-Mitgliedschafts- und Rollenanbieter Clients authentifizieren und autorisieren kann.The Membership and Role Provider sample demonstrates how a service can use the ASP.NETASP.NET membership and role providers to authenticate and authorize clients.

In diesem Beispiel ist der Client eine Konsolenanwendung (.exe), und der Dienst wird von IIS (Internet Information Services, Internetinformationsdienste) gehostet.In this sample, the client is a console application (.exe) and the service is hosted by Internet Information Services (IIS).

Hinweis

Die Setupprozedur und die Buildanweisungen für dieses Beispiel befinden sich am Ende dieses Themas.The setup procedure and build instructions for this sample are located at the end of this topic.

In diesem Beispiel werden folgende Vorgänge veranschaulicht:The sample demonstrates how:

  • Ein Client kann die Authentifizierung mithilfe einer Kombination aus Benutzername und Kennwort durchführen.A client can authenticate by using the username-password combination.

  • Der Server kann die Clientanmeldeinformationen anhand des ASP.NETASP.NET-Mitgliedschaftsanbieters überprüfen.The server can validate the client credentials against the ASP.NETASP.NET membership provider.

  • Der Server kann über das X.509-Zertifikat des Servers authentifiziert werden.The server can be authenticated by using the server's X.509 certificate.

  • Der Server kann den authentifizierten Client mit dem ASP.NETASP.NET-Rollenanbieter einer Rolle zuordnen.The server can map the authenticated client to a role by using the ASP.NETASP.NET role provider.

  • Der Server kann mit PrincipalPermissionAttribute den Zugriff auf bestimmte Methoden steuern, die vom Dienst verfügbar gemacht werden.The server can use the PrincipalPermissionAttribute to control access to certain methods that are exposed by the service.

Die Mitgliedschafts- und Rollenanbieter werden für die Verwendung eines Speichers konfiguriert, der von SQL Server unterstützt wird.The membership and role providers are configured to use a store backed by SQL Server. Eine Verbindungszeichenfolge und verschiedene Optionen werden in der Dienstkonfigurationsdatei angegeben.A connection string and various options are specified in the service configuration file. Dem Mitgliedschaftsanbieter wird der Name SqlMembershipProvider zugewiesen, und dem Rollenanbieter wird der Name SqlRoleProvider zugewiesen.The membership provider is given the name SqlMembershipProvider while the role provider is given the name SqlRoleProvider.

<!-- Set the connection string for SQL Server -->  
<connectionStrings>  
  <add name="SqlConn"   
       connectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=aspnetdb;" />  
</connectionStrings>  

<system.web>  
  <!-- 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>  

  <!-- Configure the Sql Role Provider -->  
  <roleManager enabled ="true"   
               defaultProvider ="SqlRoleProvider" >  
    <providers>  
      <add name ="SqlRoleProvider"   
           type="System.Web.Security.SqlRoleProvider"   
           connectionStringName="SqlConn"   
           applicationName="MembershipAndRoleProviderSample"/>  
    </providers>  
  </roleManager>  
</system.web>  

Der Dienst macht einen einzigen Endpunkt für die Kommunikation mit dem Dienst verfügbar. Dieser wird mit der Konfigurationsdatei Web.config definiert.The service exposes a single endpoint for communicating with the service, which is defined by using the Web.config configuration file. Der Endpunkt besteht aus einer Adresse, einer Bindung und einem Vertrag.The endpoint consists of an address, a binding, and a contract. Die Bindung wird mit einer Standard-wsHttpBinding konfiguriert, die standardmäßig die Windows-Authentifizierung verwendet.The binding is configured with a standard wsHttpBinding, which defaults to using Windows authentication. In diesem Beispiel wird die Standard-wsHttpBinding auf die Verwendung der Benutzernamenauthentifizierung festgelegt.This sample sets the standard wsHttpBinding to use username authentication. Das Verhalten gibt an, dass das Serverzertifikat für die Dienstauthentifizierung verwendet werden soll.The behavior specifies that the server certificate is to be used for service authentication. Das Serverzertifikat muss für den gleichen Wert enthalten die SubjectName als die findValue Attribut in der <ServiceCertificate > Konfigurationselement.The server certificate must contain the same value for the SubjectName as the findValue attribute in the <serviceCertificate> configuration element. Außerdem gibt das Verhalten an, dass die Authentifizierung von Benutzername/Kennwort-Paaren vom ASP.NETASP.NET-Mitgliedschaftsanbieter und die Rollenzuordnung vom ASP.NETASP.NET-Rollenanbieter ausgeführt werden soll, indem die für die beiden Anbieter definierten Namen angegeben werden.In addition the behavior specifies that authentication of username-password pairs is performed by the ASP.NETASP.NET membership provider and role mapping is performed by the ASP.NETASP.NET role provider by specifying the names defined for the two providers.

<system.serviceModel>  

  <protocolMapping>  
    <add scheme="http" binding="wsHttpBinding" />  
  </protocolMapping>  

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

  <behaviors>  
    <serviceBehaviors>  
      <behavior>  
        <!-- Configure role based authorization to use the Role Provider -->  
        <serviceAuthorization principalPermissionMode ="UseAspNetRoles"  
                              roleProviderName ="SqlRoleProvider" />  
        <serviceCredentials>  
          <!-- Configure user name authentication to use the Membership Provider -->  
          <userNameAuthentication userNamePasswordValidationMode ="MembershipProvider"   
                                  membershipProviderName ="SqlMembershipProvider"/>  
          <!-- Configure the service certificate -->  
          <serviceCertificate storeLocation ="LocalMachine"   
                              storeName ="My"   
                              x509FindType ="FindBySubjectName"  
                              findValue ="localhost" />  
        </serviceCredentials>  
        <!--For debugging purposes set the includeExceptionDetailInFaults attribute to true-->  
        <serviceDebug includeExceptionDetailInFaults="false" />  
        <serviceMetadata httpGetEnabled="true"/>  
      </behavior>  
    </serviceBehaviors>  
  </behaviors>  
</system.serviceModel>  

Wenn Sie das Beispiel ausführen, ruft der Client die unterschiedlichen Dienstvorgänge unter drei verschiedenen Benutzerkonten auf: Alice, Bob und Charlie.When you run the sample, the client calls the various service operations under three different user accounts: Alice, Bob, and Charlie. Die Anforderungen und Antworten des Vorgangs werden im Clientkonsolenfenster angezeigt.The operation requests and responses are displayed in the client console window. Alle vier Aufrufe als Benutzer "Alice" sollten erfolgreich sein.All four calls made as user "Alice" should succeed. Für Benutzer "Bob" sollte der Versuch, die Divide-Methode aufzurufen, zu einem Zugriffsverweigerungsfehler führen.User "Bob" should get an access denied error when trying to call the Divide method. Bei Benutzer "Charlie" sollte beim Versuch, die Multiply-Methode aufzurufen, ein Zugriffsverweigerungsfehler auftreten.User "Charlie" should get an access denied error when trying to call the Multiply method. Drücken Sie im Clientfenster die EINGABETASTE, um den Client zu schließen.Press ENTER in the client window to shut down the client.

So können Sie das Beispiel einrichten, erstellen und ausführenTo set up, build, and run the sample

  1. Führen Sie zum Erstellen der C#- oder Visual Basic-Edition der Lösung die Anweisungen im Ausführen der Windows Communication Foundation-Beispiele.To build the C# or Visual Basic .NET edition of the solution, follow the instructions in Running the Windows Communication Foundation Samples.

  2. Stellen Sie sicher, dass Sie konfiguriert haben, die ASP.NET Anwendungsdienstdatenbank.Ensure that you have configured the ASP.NET Application Services Database.

    Hinweis

    Wenn Sie SQL Server Express Edition ausführen, lautet der Servername .\SQLEXPRESS.If you are running SQL Server Express Edition, your server name is .\SQLEXPRESS. Dieser Server sollte zum Konfigurieren der ASP.NETASP.NET-Datenbank für die Anwendungsdienste sowie in der Web.config-Verbindungszeichenfolge verwendet werden.This server should be used when configuring the ASP.NETASP.NET Application Services Database as well as in the Web.config connection string.

    Hinweis

    Das ASP.NETASP.NET-Arbeitsprozesskonto muss über Berechtigungen für die in diesem Schritt erstellte Datenbank verfügen.The ASP.NETASP.NET worker process account must have permissions on the database that is created in this step. Verwenden Sie hierzu das sqlcmd-Hilfsprogramm oder SQL Server Management Studio.Use the sqlcmd utility or SQL Server Management Studio to do this.

  3. Um das Beispiel in einer Konfiguration mit einem einzigen Computer oder computerübergreifend auszuführen, befolgen Sie die folgenden Anweisungen.To run the sample in a single- or cross-computer configuration, use the following instructions.

So führen Sie das Beispiel auf demselben Computer ausTo run the sample on the same computer

  1. Stellen Sie sicher, dass der Pfad den Ordner enthält, in dem sich Makecert.exe befindet.Make sure that the path includes the folder where Makecert.exe is located.

  2. Führen Sie Setup.bat aus dem Beispielinstallationsordner an einer Visual Studio-Eingabeaufforderung mit Administratorrechten aus.Run Setup.bat from the sample install folder in a Visual Studio command prompt run with administrator privileges. Hierdurch werden die Dienstzertifikate installiert, die zum Ausführen des Beispiels erforderlich sind.This installs the service certificates required for running the sample.

  3. Starten Sie Client.exe aus dem Ordner \client\bin.Launch Client.exe from \client\bin. In der Clientkonsolenanwendung wird Clientaktivität angezeigt.Client activity is displayed on the client console application.

  4. Wenn Client und Dienst nicht miteinander kommunizieren können, finden Sie unter Tipps zur Problembehandlung.If the client and service are not able to communicate, see Troubleshooting Tips.

So führen Sie das Beispiel computerübergreifend ausTo run the sample across computers

  1. Erstellen Sie auf dem Dienstcomputer ein Verzeichnis.Create a directory on the service computer. Erstellen Sie mithilfe des Verwaltungstools für Internetinformationsdienste (IIS) für dieses Verzeichnis eine virtuelle Anwendung mit dem Namen servicemodelsamples.Create a virtual application named servicemodelsamples for this directory by using the Internet Information Services (IIS) management tool.

  2. Kopieren Sie die Dienstprogrammdateien aus \inetpub\wwwroot\servicemodelsamples in das virtuelle Verzeichnis auf dem Dienstcomputer.Copy the service program files from \inetpub\wwwroot\servicemodelsamples to the virtual directory on the service computer. Stellen Sie sicher, dass Sie die Dateien in das Unterverzeichnis \bin kopieren.Ensure that you copy the files in the \bin subdirectory. Kopieren Sie außerdem die Dateien Setup.bat, GetComputerName.vbs und Cleanup.bat auf den Dienstcomputer.Also copy the Setup.bat, GetComputerName.vbs, and Cleanup.bat files to the service computer.

  3. Erstellen Sie auf dem Clientcomputer ein Verzeichnis für die Clientbinärdateien.Create a directory on the client computer for the client binaries.

  4. Kopieren Sie die Clientprogrammdateien in das Clientverzeichnis auf dem Clientcomputer.Copy the client program files to the client directory on the client computer. Kopieren Sie die Dateien "Setup.bat", "Cleanup.bat" und "ImportServiceCert.bat" ebenfalls auf den Client.Also copy the Setup.bat, Cleanup.bat, and ImportServiceCert.bat files to the client.

  5. Öffnen Sie auf dem Server eine Visual Studio-Eingabeaufforderung mit Administratorrechten, und führen Sie setup.bat service aus.On the server, open a Visual Studio command prompt with administrative privileges and run setup.bat service. Ausführen setup.bat mit der service Argument wird ein Dienstzertifikat mit dem vollqualifizierten Domänennamen des Computers erstellt und das Dienstzertifikat in eine Datei "Service.cer" exportiert exportiert.Running setup.bat with the service argument creates a service certificate with the fully-qualified domain name of the computer and exports the service certificate to a file named Service.cer.

  6. Bearbeiten der Datei "Web.config", um den neuen Zertifikatnamen entspricht (in der findValue Attribut in der <ServiceCertificate >), also den voll qualifizierten Domänennamen des Computers identisch.Edit Web.config to reflect the new certificate name (in the findValue attribute in the <serviceCertificate>), which is the same as the fully-qualified domain name of the computer.

  7. Kopieren Sie die Datei Service.cer aus dem Dienstverzeichnis in das Clientverzeichnis auf dem Clientcomputer.Copy the Service.cer file from the service directory to the client directory on the client computer.

  8. Ändern Sie in der Datei Client.exe.config auf dem Clientcomputer den Wert für die Adresse des Endpunkts, sodass er mit der neuen Adresse Ihres Diensts übereinstimmt.In the Client.exe.config file on the client computer, change the address value of the endpoint to match the new address of your service.

  9. Öffnen Sie auf dem Client eine Visual Studio-Eingabeaufforderung mit Administratorrechten, und führen Sie ImportServiceCert.bat aus.On the client, open a Visual Studio command prompt with administrative privileges and run ImportServiceCert.bat. Dadurch wird das Dienstzertifikat aus der Datei Service.cer in den Speicher CurrentUser – TrustedPeople importiert.This imports the service certificate from the Service.cer file into the CurrentUser - TrustedPeople store.

  10. Starten Sie auf dem Clientcomputer Client.exe an einer Eingabeaufforderung.On the client computer, launch Client.exe from a command prompt. Wenn Client und Dienst nicht miteinander kommunizieren können, finden Sie unter Tipps zur Problembehandlung.If the client and service are not able to communicate, see Troubleshooting Tips.

So stellen Sie den Zustand vor Ausführung des Beispiels wieder herTo clean up after the sample

  • Führen Sie Cleanup.bat im Beispielordner aus, nachdem Sie die Ausführung des Beispiels abgeschlossen haben.Run Cleanup.bat in the samples folder after you have finished running the sample.

Hinweis

Wenn dieses Beispiel computerübergreifend ausgeführt wird, entfernt dieses Skript keine Dienstzertifikate auf einem Client.This script does not remove service certificates on a client when running this sample across computers. Wenn Sie Windows Communication Foundation (WCF)Windows Communication Foundation (WCF)-Beispiele ausgeführt haben, die Zertifikate computerübergreifend verwenden, müssen Sie die Dienstzertifikate entfernen, die im Speicher CurrentUser – TrustedPeople installiert wurden.If you have run Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) samples that use certificates across computers, be sure to clear the service certificates that have been installed in the CurrentUser - TrustedPeople store. Verwenden Sie dazu den folgenden Befehl: certmgr -del -r CurrentUser -s TrustedPeople -c -n <Fully Qualified Server Machine Name> Beispiel: certmgr -del -r CurrentUser -s TrustedPeople -c -n server1.contoso.com.To do this, use the following command: certmgr -del -r CurrentUser -s TrustedPeople -c -n <Fully Qualified Server Machine Name> For example: certmgr -del -r CurrentUser -s TrustedPeople -c -n server1.contoso.com.

Die SetupbatchdateiThe Setup Batch File

Mit der in diesem Beispiel enthaltenen Batchdatei Setup.bat können Sie den Server mit relevanten Zertifikaten zum Ausführen einer selbst gehosteten Anwendung konfigurieren, die serverzertifikatbasierte Sicherheit erfordert.The Setup.bat batch file included with this sample allows you to configure the server with relevant certificates to run a self-hosted application that requires server certificate-based security. Diese Batchdatei muss angepasst werden, wenn sie computerübergreifend oder in einem nicht gehosteten Szenario verwendet werden soll.This batch file must be modified to work across computers or to work in a non-hosted case.

Nachfolgend erhalten Sie einen kurzen Überblick über die verschiedenen Abschnitte der Batchdateien, damit Sie sie so ändern können, dass sie in der entsprechenden Konfiguration ausgeführt werden.The following provides a brief overview of the different sections of the batch files so that they can be modified to run in the appropriate configuration.

  • Erstellen des Serverzertifikats.Creating the server certificate.

    Mit den folgenden Zeilen aus der Batchdatei "Setup.bat" wird das zu verwendende Serverzertifikat erstellt.The following lines from the Setup.bat batch file create the server certificate to be used. Die Variable %SERVER_NAME% gibt den Servernamen an.The %SERVER_NAME% variable specifies the server name. Ändern Sie diese Variable, und geben Sie Ihren eigenen Servernamen an.Change this variable to specify your own server name. Standardmäßig lautet sie in dieser Batchdatei localhost.This batch file defaults it to localhost.

    Das Zertifikat wird im persönlichen Speicher unter dem Speicherort LocalMachine gespeichert.The certificate is stored in My (Personal) store under the LocalMachine store location.

    echo ************  
    echo Server cert setup starting  
    echo %SERVER_NAME%  
    echo ************  
    echo making server cert  
    echo ************  
    makecert.exe -sr LocalMachine -ss MY -a sha1 -n CN=%SERVER_NAME% -sky exchange -pe  
    
  • Installieren Sie das Serverzertifikat im Speicher für vertrauenswürdige Zertifikate des Clients.Installing the server certificate into the client's trusted certificate store.

    Mit den folgenden Zeilen in der Batchdatei Setup.bat wird das Serverzertifikat in den Clientspeicher für vertrauenswürdige Personen kopiert.The following lines in the Setup.bat batch file copy the server certificate into the client trusted people store. Dieser Schritt ist erforderlich, da von "Makecert.exe" generierte Zertifikate nicht implizit vom Clientsystem als vertrauenswürdig eingestuft werden.This step is required because certificates generated by Makecert.exe are not implicitly trusted by the client system. Wenn Sie bereits über ein Zertifikat verfügen, das von einem vertrauenswürdigen Clientstammzertifikat stammt (z. B. ein von Microsoft ausgegebenes Zertifikat), ist dieser Schritt zum Füllen des Clientzertifikatspeichers mit dem Serverzertifikat nicht erforderlich.If you already have a certificate that is rooted in a client trusted root certificate—for example, a Microsoft-issued certificate—this step of populating the client certificate store with the server certificate is not required.

    certmgr.exe -add -r LocalMachine -s My -c -n %SERVER_NAME% -r CurrentUser -s TrustedPeople  
    

Siehe auchSee Also