Instrukcje: Użycie dostawcy członkostwa platformy ASP.NET
Dostawca członkostwa ASP.NET to funkcja umożliwiająca deweloperom ASP.NET tworzenie witryn sieci Web, które umożliwiają użytkownikom tworzenie unikatowych kombinacji nazw użytkowników i haseł. W ramach tej funkcji każdy użytkownik może ustanowić konto z witryną i zalogować się w celu uzyskania wyłącznego dostępu do witryny i jej usług. Jest to w przeciwieństwie do zabezpieczeń systemu Windows, co wymaga od użytkowników posiadania kont w domenie systemu Windows. Zamiast tego każdy użytkownik dostarczający swoje poświadczenia (kombinacja nazwy użytkownika/hasła) może korzystać z witryny i jej usług.
Aby zapoznać się z przykładową aplikacją, zobacz Członkostwo i dostawca ról. Aby uzyskać informacje na temat korzystania z funkcji dostawcy ról ASP.NET, zobacz Instrukcje: używanie dostawcy ról ASP.NET z usługą.
Funkcja członkostwa wymaga użycia bazy danych programu SQL Server do przechowywania informacji o użytkowniku. Funkcja zawiera również metody monitowania z pytaniem wszystkich użytkowników, którzy zapomnieli swoje hasło.
Deweloperzy programu Windows Communication Foundation (WCF) mogą korzystać z tych funkcji w celach bezpieczeństwa. Po zintegrowaniu z aplikacją WCF użytkownicy muszą podać kombinację nazwy użytkownika/hasła do aplikacji klienckiej WCF. Aby przenieść dane do usługi WCF, użyj powiązania, które obsługuje poświadczenia nazwy użytkownika/hasła, takie jak WSHttpBinding (w konfiguracji, <wsHttpBinding>) i ustaw typ poświadczeń klienta na UserName
. W usłudze zabezpieczenia WCF uwierzytelniają użytkownika na podstawie nazwy użytkownika i hasła, a także przypisuje rolę określoną przez rolę ASP.NET.
Uwaga
Program WCF nie udostępnia metod wypełniania bazy danych kombinacjami nazwy użytkownika/hasła ani innych informacji o użytkowniku.
Aby skonfigurować dostawcę członkostwa
W pliku Web.config w obszarze
<system.web>
elementu utwórz<membership>
element.W obszarze
<membership>
elementu utwórz<providers>
element.Jako element podrzędny do
<providers>
elementu dodaj<clear />
element, aby opróżnić kolekcję dostawców.W obszarze elementu utwórz element z następującymi atrybutami ustawionymi na odpowiednie wartości:
name
, ,connectionStringName
enablePasswordRetrieval
enablePasswordReset
requiresQuestionAndAnswer
type
applicationName
,requiresUniqueEmail
, i .passwordFormat
<add>
<clear />
Atrybutname
jest używany później jako wartość w pliku konfiguracji. Poniższy przykład ustawia go naSqlMembershipProvider
wartość .W poniższym przykładzie przedstawiono sekcję konfiguracji.
<!-- 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>
Aby skonfigurować zabezpieczenia usługi tak, aby akceptowały kombinację nazwy użytkownika/hasła
W pliku konfiguracji w obszarze elementu system.serviceModel> dodaj <element bindings>.<
Dodaj element <wsHttpBinding> do sekcji powiązań. Aby uzyskać więcej informacji na temat tworzenia elementu powiązania WCF, zobacz How to: Specify a Service Binding in Configuration (Instrukcje: określanie powiązania usługi w konfiguracji).
Ustaw atrybut
mode
elementu<security>
naMessage
.Ustaw atrybut
clientCredentialType
elementu<message>
naUserName
. Określa to, że nazwa użytkownika/para haseł będzie używana jako poświadczenia klienta.W poniższym przykładzie pokazano kod konfiguracji powiązania.
<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>
Aby skonfigurować usługę do korzystania z dostawcy członkostwa
Jako element podrzędny do
<system.serviceModel>
elementu dodaj <element behaviors>Dodaj element <serviceBehaviors.
<behaviors>
><Dodaj zachowanie> i ustaw
name
atrybut na odpowiednią wartość.Dodaj element serviceCredentials>
<behavior>
.<Dodaj element <userNameAuthentication> do
<serviceCredentials>
elementu .userNamePasswordValidationMode
Ustaw atrybut naMembershipProvider
.Ważne
Jeśli wartość nie jest ustawiona
userNamePasswordValidationMode
, program WCF używa uwierzytelniania systemu Windows zamiast dostawcy członkostwa ASP.NET.membershipProviderName
Ustaw atrybut na nazwę dostawcy (określony podczas dodawania dostawcy w pierwszej procedurze w tym temacie). W poniższym przykładzie pokazano<serviceCredentials>
fragment do tego punktu.<behaviors> <serviceBehaviors> <behavior name="MyServiceBehavior"> <serviceCredentials> <userNameAuthentication userNamePasswordValidationMode="MembershipProvider" membershipProviderName="SqlMembershipProvider" /> </serviceCredentials> </behavior> </serviceBehaviors> </behaviors>
Przykład
Poniższy kod przedstawia konfigurację usługi korzystającej z funkcji członkostwa platformy ASP.
<?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>