2009-02-13 15 views
9

Ho creare un provider di appartenenze e cambiato il mio web.config perpassword hashing o crittografati non sono supportati con le chiavi generate automaticamente

<membership defaultProvider="MyMembershipProvider"> 
    <providers> 
    <clear/> 
    <add name="MyMembershipProvider" 
      type="Khafan.Providers.SqlMembershipProvider" 
      connectionStringName="KhafanConnectionString" 
      maxInvalidPasswordAttempts="5"    
      passwordAttemptWindow="10" 
      minRequiredNonalphanumericCharacters="0" 
      minRequiredPasswordLength="4" 
      passwordStrengthRegularExpression="" 
      passwordFormat="Hashed" 
      enablePasswordReset="true" 
      enablePasswordRetrieval="false"    
      requiresQuestionAndAnswer="false" 
      requiresUniqueEmail="true" /> 
    </providers> 
</membership> 

ma ora, ogni volta che provo ad accedere alla pagina di sicurezza di ASP.Net Configurazione mi dà il seguente errore:

Hashed o password cifrate non sono supportate con le chiavi generate automaticamente

nel mio database ho usato di identità per i miei PK. Non so che sia il problema o no. Ma se lo è, come posso risolverlo? Non voglio cambiare i valori di identità.

Grazie.

risposta

19

Questo perché si hanno password di hashing ma non si sono impostate chiavi specifiche nel proprio web.config. C'è un frammento di "generatore di chiavi" in questo MSDN article, eseguire due volte e li spingere nel web.config come:

<system.web> 
    <machineKey 
    validationKey="<blah>"   
    decryptionKey="<blah>" 
    validation="SHA1" 
    decryption="AES" 
    /> 

E che dovrebbe ordinare fuori. È così perché altrimenti potreste portare il vostro database di appartenenza/app su un'altra macchina e nessuna delle vostre password funzionerebbe, in quanto le chiavi della macchina generate automaticamente sarebbero diverse :-)

+3

O semplicemente utilizzare questo strumento online: http: //www.developmentnow. it/articles/machinekey_generator.aspx –

+5

Sopra il link è rotto, ma ecco un altro: http://aspnetresources.com/tools/machineKey – Sprintstar

+0

Dovrò farlo anche se sto usando un algoritmo di hashing personalizzato? E creando l'utente da una sola applicazione e provando ad accedere da un'applicazione diff, l'applicazione potrebbe essere ospitata sullo stesso o potrebbero essere macchine diverse. Entrambe le applicazioni utilizzano "System.Web.Security.SqlMembershipProvider" e la cui proprietà "passwordFormat" è "Hashed" e la proprietà "hashAlgorithmType" del tag "membership" è "CustomPbkdf2Hash". – Vipresh

3

Era un po 'uno scherzo per andare a caccia di il frammento "generatore di chiavi" nello MSDN link Steven Robbins a cui fa riferimento la sua risposta, quindi lo aggiungo qui per una rapida consultazione. Quindi questa non è una risposta autonoma. È supplementare alla risposta accettata.

da MSDN

The following code shows how to generate random key values. Compile the code to create a console application, and then pass the required key size as a command line argument expressed as the desired number of hexadecimal characters. Each byte is represented by two hexadecimal characters; therefore, to request a 32-byte key, pass 64 as a command line argument. If you do not specify an argument, the code returns a 128 hexadecimal character (64-byte) key.

using System; 
using System.Text; 
using System.Security; 
using System.Security.Cryptography; 

class App { 
    static void Main(string[] argv) { 
    int len = 128; 
    if (argv.Length > 0) 
     len = int.Parse(argv[0]); 
    byte[] buff = new byte[len/2]; 
    RNGCryptoServiceProvider rng = new 
          RNGCryptoServiceProvider(); 
    rng.GetBytes(buff); 
    StringBuilder sb = new StringBuilder(len); 
    for (int i=0; i<buff.Length; i++) 
     sb.Append(string.Format("{0:X2}", buff[i])); 
    Console.WriteLine(sb); 
    } 
} 

Inoltre, <machineKey> va all'interno di <system.web>, in questo modo:

<system.web> 
    <machineKey 
     validationKey="" 
     decryptionKey="" 
     validation="SHA1" 
     decryption="AES" 
/> 
Problemi correlati