Como: Usar o provedor de associação ASP.NET

O provedor de associação ASP.NET é um recurso que permite que os desenvolvedores de ASP.NET criem sites que permitem que os usuários criem combinações exclusivas de nome de usuário e senha. Com esta facilidade, qualquer utilizador pode estabelecer uma conta no site, e iniciar sessão para acesso exclusivo ao site e aos seus serviços. Isso contrasta com a segurança do Windows, que exige que os usuários tenham contas em um domínio do Windows. Em vez disso, qualquer usuário que forneça suas credenciais (a combinação de nome de usuário e senha) pode usar o site e seus serviços.

Para obter um aplicativo de exemplo, consulte Provedor de associação e função. Para obter informações sobre como usar o recurso de provedor de função ASP.NET, consulte Como usar o provedor de função ASP.NET com um serviço.

O recurso de associação requer o uso de um banco de dados do SQL Server para armazenar as informações do usuário. O recurso também inclui métodos para solicitar com uma pergunta qualquer usuário que tenha esquecido sua senha.

Os desenvolvedores do Windows Communication Foundation (WCF) podem aproveitar esses recursos para fins de segurança. Quando integrado em um aplicativo WCF, os usuários devem fornecer uma combinação de nome de usuário/senha para o aplicativo cliente WCF. Para transferir os dados para o serviço WCF, use uma associação que ofereça suporte a credenciais de nome de usuário/senha, como o WSHttpBinding (na configuração, o <wsHttpBinding>) e defina o tipo de credencial do cliente como UserName. No serviço, a segurança do WCF autentica o usuário com base no nome de usuário e na senha e também atribui a função especificada pela função ASP.NET.

Nota

WCF não fornece métodos para preencher o banco de dados com combinações de nome de usuário/senha ou outras informações de usuário.

Para configurar o provedor de associação

  1. No arquivo Web.config, sob o <system.web> elemento , crie um <membership> elemento .

  2. Sob o <membership> elemento , crie um <providers> elemento .

  3. Como filho ao <providers> elemento , adicione um <clear /> elemento para liberar a coleção de provedores.

  4. Sob o <clear /> elemento , crie um <add> elemento com os seguintes atributos definidos para valores apropriados: name, type, connectionStringName, applicationName, enablePasswordRetrieval, enablePasswordReset, requiresQuestionAndAnswer, requiresUniqueEmail, e passwordFormat. O name atributo é usado posteriormente como um valor no arquivo de configuração. O exemplo a seguir o define como SqlMembershipProvider.

    O exemplo a seguir mostra a seção de configuração.

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

Para configurar a segurança do serviço para aceitar a combinação de nome de usuário/senha

  1. No arquivo de configuração, sob o elemento system.serviceModel>, adicione um <elemento bindings>.<

  2. Adicione um <wsHttpBinding> à seção bindings. Para obter mais informações sobre como criar um elemento de vinculação WCF, consulte Como especificar uma vinculação de serviço na configuração.

  3. Defina o mode <security> atributo do elemento como Message.

  4. Defina o clientCredentialType <message> atributo do elemento como UserName. Isso especifica que um par de nome de usuário/senha será usado como credencial do cliente.

    O exemplo a seguir mostra o código de configuração para a ligação.

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

Para configurar um serviço para usar o provedor de associação

  1. Como filho ao <system.serviceModel> elemento , adicione um <elemento behaviors>

  2. Adicione um <serviceBehaviors> ao <behaviors> elemento .

  3. Adicione um <comportamento> e defina o name atributo como um valor apropriado.

  4. Adicione um <serviceCredentials> ao <behavior> elemento .

  5. Adicione um <userNameAuthentication> ao <serviceCredentials> elemento .

  6. Defina o userNamePasswordValidationMode atributo como MembershipProvider.

    Importante

    Se o valor não estiver definido, o userNamePasswordValidationMode WCF usará a autenticação do Windows em vez do provedor de associação ASP.NET.

  7. Defina o membershipProviderName atributo como o nome do provedor (especificado ao adicionar o provedor no primeiro procedimento deste tópico). O exemplo a seguir mostra o fragmento <serviceCredentials> até este ponto.

    <behaviors>
       <serviceBehaviors>
          <behavior name="MyServiceBehavior">
             <serviceCredentials>
                <userNameAuthentication
                userNamePasswordValidationMode="MembershipProvider"
                membershipProviderName="SqlMembershipProvider" />
             </serviceCredentials>
          </behavior>
       </serviceBehaviors>
    </behaviors>
    

Exemplo

O código a seguir mostra a configuração para um serviço que usa o recurso de associação 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>

Consulte também