Gör så här: Använd ASP.NET-medlemskapsprovidern
ASP.NET-medlemskapsprovidern är en funktion som gör det möjligt för ASP.NET utvecklare att skapa webbplatser som gör det möjligt för användare att skapa unika kombinationer av användarnamn och lösenord. Med den här funktionen kan alla användare upprätta ett konto med webbplatsen och logga in för exklusiv åtkomst till webbplatsen och dess tjänster. Detta står i kontrast till Windows-säkerhet, vilket kräver att användare har konton i en Windows-domän. I stället kan alla användare som anger sina autentiseringsuppgifter (kombinationen användarnamn/lösenord) använda webbplatsen och dess tjänster.
Ett exempelprogram finns i Medlemskap och rollprovider. Information om hur du använder funktionen ASP.NET rollprovider finns i Så här använder du rollprovidern ASP.NET med en tjänst.
Medlemskapsfunktionen kräver att du använder en SQL Server-databas för att lagra användarinformationen. Funktionen innehåller också metoder för att fråga med en fråga alla användare som har glömt sitt lösenord.
Utvecklare av Windows Communication Foundation (WCF) kan dra nytta av dessa funktioner i säkerhetssyfte. När de är integrerade i ett WCF-program måste användarna ange en kombination av användarnamn/lösenord till WCF-klientprogrammet. Om du vill överföra data till WCF-tjänsten använder du en bindning som stöder autentiseringsuppgifter för användarnamn/lösenord, till exempel WSHttpBinding (i konfigurationen <, wsHttpBinding>) och anger klientens autentiseringsuppgiftstyp till UserName
. I tjänsten autentiserar WCF-säkerheten användaren baserat på användarnamnet och lösenordet och tilldelar även rollen som anges av ASP.NET roll.
Kommentar
WCF tillhandahåller inte metoder för att fylla databasen med kombinationer av användarnamn/lösenord eller annan användarinformation.
Så här konfigurerar du medlemskapsprovidern
Skapa ett
<membership>
element under elementet<system.web>
i filen Web.config.Under elementet
<membership>
skapar du ett<providers>
element.Som underordnad elementet
<providers>
lägger du till ett<clear />
element för att tömma samlingen med providrar.Under elementet
<clear />
skapar du ett<add>
element med följande attribut inställda på lämpliga värden:name
,type
,connectionStringName
,applicationName
,enablePasswordRetrieval
,enablePasswordReset
,requiresQuestionAndAnswer
, ochrequiresUniqueEmail
passwordFormat
. Attributetname
används senare som ett värde i konfigurationsfilen. I följande exempel anges det tillSqlMembershipProvider
.I följande exempel visas konfigurationsavsnittet.
<!-- 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>
Så här konfigurerar du tjänstsäkerhet för att acceptera kombinationen användarnamn/lösenord
Lägg till ett< bindningselement under elementet< system.serviceModel> i konfigurationsfilen>.
Lägg till en <wsHttpBinding> i avsnittet bindningar. Mer information om hur du skapar ett WCF-bindningselement finns i Så här anger du en tjänstbindning i konfigurationen.
mode
Ange -attributet för elementet<security>
tillMessage
.clientCredentialType
Ange -attributet för elementet<message>
tillUserName
. Detta anger att ett användarnamn/lösenordspar ska användas som klientens autentiseringsuppgifter.I följande exempel visas konfigurationskoden för bindningen.
<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>
Så här konfigurerar du en tjänst för att använda medlemskapsprovidern
Som underordnad elementet
<system.serviceModel>
lägger du till ett <beteendeelement>Lägg till en serviceBehaviors> i -elementet
<behaviors>
.<Lägg till ett <beteende> och ange
name
attributet till ett lämpligt värde.Lägg till en serviceCredentials> i elementet
<behavior>
.<Lägg till en userNameAuthentication> i elementet
<serviceCredentials>
.<Ange attributet
userNamePasswordValidationMode
tillMembershipProvider
.Viktigt!
Om värdet
userNamePasswordValidationMode
inte har angetts använder WCF Windows-autentisering i stället för ASP.NET-medlemskapsprovidern.membershipProviderName
Ange attributet till namnet på providern (anges när providern läggs till i den första proceduren i det här avsnittet). I följande exempel visas fragmentet<serviceCredentials>
till den här punkten.<behaviors> <serviceBehaviors> <behavior name="MyServiceBehavior"> <serviceCredentials> <userNameAuthentication userNamePasswordValidationMode="MembershipProvider" membershipProviderName="SqlMembershipProvider" /> </serviceCredentials> </behavior> </serviceBehaviors> </behaviors>
Exempel
Följande kod visar konfigurationen för en tjänst som använder funktionen ASP-medlemskap.
<?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>