Recuperando Senhas através do Membership

by Israel Aece 12. February 2008 15:26

A API do Membership permite-nos definir qual será o formato da senha que a mesma irá manipular. Voce pode configurar isso através da propriedade passwordFormat no arquivo Web.Config. Esse atributo recebe um dos tres valores abaixo:

  • Clear: As senhas não são criptografadas.
  • Encrypted: Senhas são criptografadas usando as configurações especificadas no elemento de configuração machineKey.
  • Hashed: As senhas são criptografadas utilizando o algoritmo de hash SHA1.

Quando optamos pelo formato Encrypted, há um passo adicional para que isso funcione. Há uma seção no arquivo de configuração chamada machineKey, que é responsável por armazenar informações relacionadas a criptografia de cookies, ViewState, etc.. Em sua configuração padrão, o ASP.NET utiliza chaves geradas automaticamente para aplicar ao algoritmo de criptografia. Esse comportamento impede o funcionamento da extração/definição da senha através do Membership em seu formato Encrypted. Se voce chegar até o método protegido EncryptPassword da classe MembershipProvider, verá que há essa consistencia:

protected virtual byte[] EncryptPassword(byte[] password)
{
    if (MachineKeySection.IsDecryptionKeyAutogenerated)
    {
        throw new ProviderException(SR.GetString("Can_not_use_encrypted_passwords_with_autogen_keys"));
    }
    return MachineKeySection.EncryptOrDecryptData(true, password, null, 0, password.Length);
}

... e isso irá atirar a seguinte exceção:

You must specify a non-autogenerated machine key to store passwords in the encrypted format. Either specify a different passwordFormat, or change the machineKey configuration to use a non-autogenerated decryption key. 

Como voce tem a aplicação sendo executada em uma máquina A e move para uma máquina B, as senhas não serão mais válidas, já que as chaves são diferentes (se for a configuração padrão do ASP.NET). Devido a isso, voce precisará especificar uma chave única para o atributo validationKey e decryptionKey no arquivo Web.Config da aplicação ou no machine.Config caso queira isso para todas as aplicações. Para definir essas chaves, voce poderá utilizar o código abaixo no seu arquivo Web.Config:

<?xml version="1.0"?>
<configuration>
  <system.web>
    <machineKey
      validationKey= "95...23"
      decryptionKey="C7...BD"

      validation="SHA1"
      decryption="AES"/>
  </system.web>
</configuration>

Tags: ,

ASP.NET | Security

Comments are closed

Powered by BlogEngine.NET 1.5.0.0
Theme by Mads Kristensen

Sobre

Meu nome é Israel Aece e sou especialista em tecnologias de desenvolvimento Microsoft, atuando como desenvolvedor de aplicações para o mercado financeiro utilizando a plataforma .NET. [ Mais ]

Twitter

Host