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
Erstellen Sie in der Web.config-Datei unter dem
<system.web>
-Element ein<membership>
-Element.Erstellen Sie unter dem
<membership>
-Element ein<providers>
-Element.Fügen Sie als untergeordnetes Element zum
<providers>
-Element ein<clear />
-Element hinzu, um die Sammlung von Anbietern zu leeren.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
undpasswordFormat
. Dasname
-Attribut wird später als Wert in der Konfigurationsdatei verwendet. Im folgenden Beispiel wird das Attribut auf den WertSqlMembershipProvider
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
Fügen Sie in der Konfigurationsdatei unter dem <system.serviceModel>-Element ein <bindings>-Element hinzu.
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.
Legen Sie das
mode
-Attribut des<security>
-Elements aufMessage
fest.Legen Sie das
clientCredentialType
-Attribut des<message>
-Elements aufUserName
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
Fügen Sie dem
<system.serviceModel>
-Element als untergeordnetes Element ein <behaviors>-Element hinzu.Fügen Sie dem
<behaviors>
-Element ein <serviceBehaviors>-Element hinzu.Fügen Sie ein <behavior>-Element hinzu, und legen Sie das Attribut
name
auf einen geeigneten Wert fest.Fügen Sie dem
<behavior>
-Element ein <serviceCredentials>-Element hinzu.Fügen Sie dem
<serviceCredentials>
-Element ein <userNameAuthentication>-Element hinzu.Legen Sie das
userNamePasswordValidationMode
-Attribut aufMembershipProvider
fest.Wichtig
Wenn der
userNamePasswordValidationMode
-Wert nicht festgelegt ist, verwendet WCF die Windows-Authentifizierung anstelle des ASP.NET-Mitgliedschaftsanbieters.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>