Procedure: de ASP.NET Lidmaatschapsprovider gebruiken
De ASP.NET lidmaatschapsprovider is een functie waarmee ASP.NET ontwikkelaars websites kunnen maken waarmee gebruikers unieke combinaties van gebruikersnaam en wachtwoord kunnen maken. Met deze faciliteit kan elke gebruiker een account met de site tot stand brengen en zich aanmelden voor exclusieve toegang tot de site en de bijbehorende services. Dit is in tegenstelling tot Windows-beveiliging, waarvoor gebruikers accounts in een Windows-domein moeten hebben. In plaats daarvan kan elke gebruiker die zijn referenties levert (de combinatie van gebruikersnaam/wachtwoord) de site en de bijbehorende services gebruiken.
Zie Lidmaatschaps- en rolprovider voor een voorbeeldtoepassing. Zie Procedure voor informatie over het gebruik van de functie ASP.NET rolprovider: De ASP.NET-rolprovider gebruiken met een service.
Voor de lidmaatschapsfunctie moet u een SQL Server-database gebruiken om de gebruikersgegevens op te slaan. De functie bevat ook methoden voor het vragen bij vragen aan gebruikers die hun wachtwoord zijn vergeten.
WcF-ontwikkelaars (Windows Communication Foundation) kunnen profiteren van deze functies voor beveiligingsdoeleinden. Wanneer deze is geïntegreerd in een WCF-toepassing, moeten gebruikers een combinatie van gebruikersnaam en wachtwoord opgeven voor de WCF-clienttoepassing. Als u de gegevens wilt overdragen naar de WCF-service, gebruikt u een binding die ondersteuning biedt voor referenties voor gebruikersnaam en wachtwoord, zoals (WSHttpBindingin configuratie, wsHttpBinding><) en stelt u het clientreferentietype in op .UserName
Op de service verifieert WCF-beveiliging de gebruiker op basis van de gebruikersnaam en het wachtwoord en wijst ook de rol toe die is opgegeven door de ASP.NET-rol.
Notitie
WCF biedt geen methoden voor het vullen van de database met combinaties van gebruikersnaam en wachtwoord of andere gebruikersgegevens.
De lidmaatschapsprovider configureren
Maak in het bestand Web.config onder het
<system.web>
element een<membership>
element.Maak onder het
<membership>
element een<providers>
element.Voeg als onderliggend element
<providers>
een<clear />
element toe om de verzameling providers leeg te maken.Maak onder het element een
<add>
element met de volgende kenmerken ingesteld op de juiste waarden:name
, ,type
connectionStringName
,applicationName
, ,enablePasswordRetrieval
,enablePasswordReset
, ,requiresQuestionAndAnswer
enrequiresUniqueEmail
passwordFormat
.<clear />
Hetname
kenmerk wordt later gebruikt als een waarde in het configuratiebestand. In het volgende voorbeeld wordt dit ingesteld opSqlMembershipProvider
.In het volgende voorbeeld ziet u de configuratiesectie.
<!-- 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>
Servicebeveiliging configureren om de combinatie van gebruikersnaam/wachtwoord te accepteren
Voeg in het configuratiebestand onder het element system.serviceModel> een< bindingselement> toe.<
Voeg een <wsHttpBinding> toe aan de sectie Bindingen. Zie How to: Specify a Service Binding in Configuration (Een servicebinding opgeven in configuratie) voor meer informatie over het maken van een WCF-bindingselement.
Stel het
mode
kenmerk van het<security>
element in opMessage
.Stel het
clientCredentialType
kenmerk van het<message>
element in opUserName
. Hiermee geeft u op dat een gebruikersnaam/wachtwoordpaar wordt gebruikt als de referenties van de client.In het volgende voorbeeld ziet u de configuratiecode voor de binding.
<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>
Een service configureren voor het gebruik van de lidmaatschapsprovider
Als onderliggend
<system.serviceModel>
element voegt u een <gedragselement> toeVoeg een <serviceBehaviors> toe aan het
<behaviors>
element.Voeg een <gedrag> toe en stel het
name
kenmerk in op een geschikte waarde.Voeg een <serviceCredentials> toe aan het
<behavior>
element.Voeg een <userNameAuthentication> toe aan het
<serviceCredentials>
element.Stel het
userNamePasswordValidationMode
kenmerk in opMembershipProvider
.Belangrijk
Als de
userNamePasswordValidationMode
waarde niet is ingesteld, gebruikt WCF Windows-verificatie in plaats van de ASP.NET lidmaatschapsprovider.Stel het
membershipProviderName
kenmerk in op de naam van de provider (opgegeven bij het toevoegen van de provider in de eerste procedure in dit onderwerp). In het volgende voorbeeld ziet u het<serviceCredentials>
fragment naar dit punt.<behaviors> <serviceBehaviors> <behavior name="MyServiceBehavior"> <serviceCredentials> <userNameAuthentication userNamePasswordValidationMode="MembershipProvider" membershipProviderName="SqlMembershipProvider" /> </serviceCredentials> </behavior> </serviceBehaviors> </behaviors>
Opmerking
De volgende code toont de configuratie voor een service die gebruikmaakt van de ASP-lidmaatschapsfunctie.
<?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>