Compartilhar via


Como: usar o provedor de associação do ASP.NET

O provedor de associação ASP.NET é um recurso que permite que desenvolvedores ASP.NET criem sites que permitem que os usuários criem combinações exclusivas de nome de usuário e senha. Com essa instalação, qualquer usuário pode estabelecer uma conta com o site e entrar para acesso exclusivo ao site e 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 nome de usuário/senha) pode usar o site e seus serviços.

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

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

Os desenvolvedores do WCF (Windows Communication Foundation) podem aproveitar esses recursos para fins de segurança. Quando integrados a um aplicativo WCF, os usuários precisam 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 dê suporte a credenciais de nome de usuário/senha, como WSHttpBinding o (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.

Observação

O 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 do usuário.

Para configurar o provedor de associação

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

  2. Abaixo do elemento <membership>, crie um elemento <providers>.

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

  4. Embaixo do elemento <clear />, crie um elemento <add> com os seguintes atributos definidos como valores apropriados: name, type, connectionStringName, applicationName, enablePasswordRetrieval, enablePasswordReset, requiresQuestionAndAnswer, requiresUniqueEmail e passwordFormat. O atributo name é usado posteriormente como um valor no arquivo de configuração. O exemplo a seguir define-o 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 nome de usuário/senha

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

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

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

  4. Defina o atributo clientCredentialType do elemento <message> 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 associaçã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 um filho do elemento <system.serviceModel>, adicione um elemento de <comportamento>

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

  3. Adicione um <behavior> e defina o atributo name com um valor apropriado.

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

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

  6. Defina o atributo userNamePasswordValidationMode como MembershipProvider.

    Importante

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

  7. Defina o atributo membershipProviderName como o nome do provedor (especificado ao adicionar o provedor no primeiro procedimento neste tópico). O exemplo a seguir mostra o fragmento do <serviceCredentials> para 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 de 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>

Confira também