2009-02-13 30 views
9

muszę utworzyć dostawcę członkostwa i zmienił moje web.config dozakodowane lub zaszyfrowane hasła nie są obsługiwane automatycznie generowanych kluczy

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

ale teraz, gdy próbuję przeglądać strony zabezpieczeń ASP.Net konfiguracja daje mi następujący błąd:

zakodowane lub zaszyfrowane hasła nie są obsługiwane automatycznie generowanych kluczy

W mojej bazy danych Użyłem tożsamości dla moich PK. Nie wiem, czy to problem, czy nie. Ale jeśli tak, jak mogę to rozwiązać? Nie chcę zmieniać wartości tożsamości.

Dzięki.

Odpowiedz

19

Dzieje się tak dlatego, że hashują hasła, ale nie ustawiły określonych kluczy w pliku web.config. Jest tam „generator klucz” fragment w tym MSDN article, uruchom go dwa razy i wpakować je w pliku web.config jako:

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

I to powinno rozwiązać cię. To tak, ponieważ w przeciwnym razie można by przenieść swoją bazę danych/aplikację do innego komputera i żadne z twoich haseł nie zadziałałoby, ponieważ wygenerowane automatycznie klucze maszynowe byłyby inne :-)

+3

Lub po prostu użyć tego narzędzia online: http: //www.developmentnow. com/articles/machinekey_generator.aspx –

+5

Powyższy link jest uszkodzony, ale tutaj jest inny: http://aspnetresources.com/tools/machineKey – Sprintstar

+0

Czy muszę to zrobić, nawet jeśli używam niestandardowego algorytmu mieszania? Tworząc użytkownika z jednej aplikacji i próbując zalogować się z aplikacji diff, aplikacja może być hostowana na tych samych lub różnych maszynach. Obie aplikacje korzystają z "System.Web.Security.SqlMembershipProvider", a właściwość "passwordFormat" to "Hashed", a właściwość "hashAlgorithmType" znacznika "membership" to "CustomPbkdf2Hash". – Vipresh

3

Byłem kawałkiem do polowania na Fragment "klucza generatorowego" w Steven Robbins, o którym mowa w jego odpowiedzi, dlatego dodałem go tutaj, by uzyskać szybki dostęp. To nie jest samodzielna odpowiedź. Jest to uzupełnienie przyjętej odpowiedzi.

od 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); 
    } 
} 

Również <machineKey> wnika <system.web>, tak:

<system.web> 
    <machineKey 
     validationKey="" 
     decryptionKey="" 
     validation="SHA1" 
     decryption="AES" 
/> 
Powiązane problemy