Procedura: usare provider di appartenenza ASP.NET
Il provider di appartenenza ASP.NET è una funzionalità che consente agli sviluppatori di ASP.NET di creare siti Web che consentono agli utenti di creare combinazioni di nome utente e password univoche. Con questa funzionalità qualsiasi utente può stabilire un account nel sito e accedere in modo esclusivo al sito e ai relativi servizi. Si tratta di una funzionalità in contrasto con la protezione di Windows, in base alla quale è necessario che gli utenti dispongano di un account in un dominio Windows. Qualsiasi utente che fornisca le credenziali (ovvero nome utente e password) può usare il sito e i relativi servizi.
Per un'applicazione di esempio, vedere Appartenenza e provider di ruoli. Per informazioni sull'uso della funzionalità del provider di ruoli ASP.NET, vedere Procedura: Usare il provider di ruoli ASP.NET con un servizio.
La funzionalità di appartenenza richiede l'utilizzo di un database SQL Server per archiviare le informazioni utente. La funzionalità include anche metodi per presentare una domanda agli utenti che hanno dimenticato la password.
Gli sviluppatori di Windows Communication Foundation (WCF) possono sfruttare queste funzionalità a scopo di sicurezza. In caso di integrazione in un'applicazione WCF, gli utenti devono fornire una combinazione di nome utente e password all'applicazione client WCF. Per trasferire i dati al servizio WCF, usare un binding che supporta credenziali di nome utente/password, ad esempio WSHttpBinding (nella configurazione, <wsHttpBinding>) e impostare il tipo di credenziale client su UserName
. Nel servizio, la sicurezza WCF autentica l'utente sulla base del nome utente e della password, inoltre assegna il ruolo specificato dal ruolo ASP.NET.
Nota
WCF non fornisce metodi per popolare il database con combinazioni di nome utente/password o altre informazioni utente.
Per configurare il provider di appartenenza
Nel file Web.config, sotto l'elemento
<system.web>
, creare un elemento<membership>
.Sotto l'elemento
<membership>
, creare un elemento<providers>
.Come figlio dell'elemento
<providers>
, aggiungere un elemento<clear />
per scaricare la raccolta di provider.Sotto l'elemento
<clear />
, creare un elemento<add>
con gli attributi seguenti impostati sui valori appropriati:name
,type
,connectionStringName
,applicationName
,enablePasswordRetrieval
,enablePasswordReset
,requiresQuestionAndAnswer
,requiresUniqueEmail
epasswordFormat
. L'attributoname
viene utilizzato in seguito come valore nel file di configurazione. Nell'esempio seguente viene impostato suSqlMembershipProvider
.Nell'esempio che segue viene illustrata la sezione di configurazione.
<!-- 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>
Per configurare la sicurezza del servizio per accettare la combinazione di nome utente/password
Nel file di configurazione, sotto l'elemento <system.serviceModel>, aggiungere un elemento <bindings>.
Aggiungere <wsHttpBinding> alla sezione binding. Per altre informazioni sulla creazione di un elemento di binding WCF, vedere Procedura: Specificare un binding al servizio nella configurazione.
Impostare l'attributo
mode
dell'elemento<security>
suMessage
.Impostare l'attributo
clientCredentialType
dell'elemento<message>
suUserName
. Viene in questo modo specificato che un nome utente e una password saranno utilizzati come credenziale del client.Nell'esempio seguente viene illustrato il codice di configurazione per l'associazione.
<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>
Per configurare un servizio affinché utilizzi il provider di appartenenza
Come elemento figlio dell'elemento
<system.serviceModel>
, aggiungere un elemento <behaviors>Aggiungere un oggetto <serviceBehaviors> all'elemento
<behaviors>
.Aggiungere un elemento <behavior> e impostare l'attributo
name
su un valore appropriato.Aggiungere un elemento <serviceCredentials> all'elemento
<behavior>
.Aggiungere <userNameAuthentication> all'elemento
<serviceCredentials>
.Impostare l'attributo
userNamePasswordValidationMode
suMembershipProvider
.Importante
Se il valore
userNamePasswordValidationMode
non è impostato, WCF usa l'autenticazione di Windows anziché il provider di appartenenze ASP.NET.Impostare l'attributo
membershipProviderName
sul nome del provider (specificato al momento di aggiungere il provider nella prima procedura in questo argomento). Nell'esempio seguente viene illustrato il frammento<serviceCredentials>
fino a questo punto.<behaviors> <serviceBehaviors> <behavior name="MyServiceBehavior"> <serviceCredentials> <userNameAuthentication userNamePasswordValidationMode="MembershipProvider" membershipProviderName="SqlMembershipProvider" /> </serviceCredentials> </behavior> </serviceBehaviors> </behaviors>
Esempio
Nel codice seguente viene mostrata la configurazione per un servizio che utilizza la funzionalità di appartenenza 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>