Procedura: utilizzare 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ò utilizzare il sito e i relativi servizi.

Per un'applicazione di esempio, vedere Membership and Role Provider. Per ulteriori informazioni sull'utilizzo della funzionalità provider di ruoli ASP.NET, vedere Procedura: utilizzare 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 Windows Communication Foundation (WCF) possono sfruttare queste funzionalità a fini di protezione. 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, utilizzare un'associazione che supporta credenziali di nome utente/password, ad esempio WSHttpBinding (nella configurazione, wsHttpBinding Element) e impostare il tipo di credenziale client su UserName. Nel servizio, la protezione 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

  1. Nel file Web.config, sotto l'elemento <system.web> creare un elemento <providers>.

  2. Come figlio dell'elemento <providers>, aggiungere un elemento <clear /> per scaricare l'insieme di provider.

  3. Sotto l'elemento <clear />, creare un elemento <add> con gli attributi seguenti impostati sui valori appropriati: name, type, connectionStringName, applicationName, enablePasswordRetrieval, enablePasswordReset, requiresQuestionAndAnswer, requiresUniqueEmail e passwordFormat. L'attributo name viene utilizzato in seguito come valore nel file di configurazione. Nell'esempio seguente viene impostato su SqlMembershipProvider.

    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 protezione del servizio per accettare la combinazione di nome utente/password

  1. Aggiungere un elemento <bindings> al file di configurazione, sotto l'elemento <system.ServiceModel>.

  2. Aggiungere un elemento wsHttpBinding Element alla sezione delle associazioni. Per ulteriori informazioni sulla creazione di un elemento di associazione WCF, vedere Procedura: specificare un'associazione al servizio in configurazione.

  3. Impostare l'attributo mode dell'elemento <security> su Message.

  4. Impostare l'attributo clientCredentialType dell'elemento <message> su UserName. 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

  1. Aggiungere un elemento <behaviors> come figlio dell'elemento <system.serviceModel>

  2. Aggiungere una sezione serviceBehaviors section all'elemento <behaviors>.

  3. Aggiungere un elemento Behavior element e impostare l'attributo name su un valore appropriato.

  4. Aggiungere <serviceCredentials> Element all'elemento <behavior>.

  5. Aggiungere userNameAuthentication element all'elemento <serviceCredentials>.

  6. Impostare l'attributo userNamePasswordValidationMode su MembershipProvider.

    Nota

    Se il valore userNamePasswordValidationMode non è impostato, WCF utilizza l'autenticazione di Windows invece del provider di appartenenza ASP.NET.

  7. 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.

    <serviceCredentials>
      <userNameAuthentication userNamePasswordValidationMode ="MembershipProvider" 
          membershipProviderName ="SqlMembershipProvider"/>
    </serviceCredentials>
    

Vedere anche

Attività

Procedura: utilizzare il provider di ruoli ASP.NET con un servizio

Altre risorse

Membership and Role Provider