2012-01-18 12 views
5

Mam stronę WWW, a teraz chcę uzyskać hasła.Hasła nie można odzyskać. Albo ustaw format hasła na inny typ, albo ustaw parametr enablePasswordRetrieval na false

używam go:

<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" 
      connectionStringName="TravelChamps" 
enablePasswordRetrieval="true" 
      enablePasswordReset="true" 
      requiresQuestionAndAnswer="false" 
      requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" 
      minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/"    
      /> 

I ten błąd się dzieje:

skonfigurowane ustawienia są nieprawidłowe: zakodowane hasła nie mogą być odzyskane. Ustaw format hasła na inny lub ustaw parametr enablePasswordRetrieval na false.

Jeśli użyję go:

<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" 
      connectionStringName="TravelChamps" enablePasswordRetrieval="false" 
      enablePasswordReset="true" 
      requiresQuestionAndAnswer="false" 
      requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" 
      minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/"    
      /> 

pojawia się błąd follwoing:

Wystąpił wyjątek odzyskiwania hasła: To dostawcę członkostwa nie został skonfigurowany do obsługi odzyskiwania hasła.

Jestem całkowicie zdezorientowany.

Jakieś sugestie, gdzie mogę zacząć pracować?

Odpowiedz

3

Nie można uzyskać haseł, ponieważ nigdy nie były przechowywane. (Szczególnie po to, aby nikt nie mógł zrobić dokładnie tego, co próbujesz zrobić). Obejście problemu nie polega na tym, aby uzyskać hasła.

+0

Hasła znajdują się w bazie danych. Mogę to zobaczyć. I są zaszyfrowane lub zaszyfrowane. Nie wiem –

+4

Są one specjalnie mieszane, aby nie można było ich odzyskać. Nie są one zaszyfrowane, więc nie można ich odszyfrować. Tak właśnie powinno się to stać. –

+0

OK. Jak mogę je zdobyć? Po prostu chcę użyć MembershipUser u = Membership.GetUser (nazwa użytkownika, false); –

1

Aby odpowiedzieć na pytanie, można użyć metody opisane w tym linku: Retrieving the users password

ale nigdy bym czegoś takiego jak, aby Twoje dane użytkowników niepewna. Powinieneś pozwolić im "zresetować" tylko, nigdy nie odzyskać. Nie powinieneś widzieć ani być w stanie odzyskać swoich haseł użytkowników, a ja doradziłbym każdemu, aby nie używał twojej aplikacji lub strony internetowej z tego powodu, ale metoda podana w linku działa.

10

Jeśli chcesz, aby hasła mogły być odzyskiwane lub aby uzyskać je jako zwykły tekst (nie zaszyfrowane), musisz zmienić niektóre konfiguracje członkostwa przed utworzeniem pierwszego użytkownika.

wykonać następujące zadania (dotyczy to Asp netto):

1.In plikowi web.config w tagu członkostwa/dostawców/dodać zestaw atrybutów:

enablePasswordRetrieval="true"<br/> 
passwordFormat="Encrypted" 

moje ustawienia:

<membership> 
    <providers> 
    <clear/> 
    <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider"  connectionStringName="maindb" 
     enablePasswordRetrieval="true" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" 
     maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" 
     applicationName="/" passwordFormat="Encrypted" /> 
    </providers> 
</membership> 

2.Generate tzw validationKey i decryptionKey. Można to zrobić przez NET API:

mój przykład:

public static class RNGCrypto_MachineKey 
{ 
    public static string getRandomKey(int bytelength) 
    { 
     byte[] buff = new byte[bytelength]; 
     RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider(); 
     rng.GetBytes(buff); 
     StringBuilder sb = new StringBuilder(bytelength * 2); 
     for (int i = 0; i < buff.Length; i++) 
      sb.Append(string.Format("{0:X2}", buff[i])); 
     return sb.ToString(); 
    } 
} 

generowania:

string key64 = RNGCrypto_MachineKey.getRandomKey(64); 
string key32 = RNGCrypto_MachineKey.getRandomKey(32); 

3.Ponownie, w pliku web.configumieścić następujące ustawienia wewnątrz znacznika system.Web:

<machineKey validationKey="paste here the key64 string" decryptionKey="paste here the key32 string" validation="SHA1"/> 

(about machinkey on msdn)

4.Now można tworzyć użytkowników z hasłami, a następnie można dostać zwykły hasło:

Membership.GetUser(username).GetPassword(); 
+0

Dostępne tutaj rozwiązanie działa, ale czy istnieją luki w zabezpieczeniach, które należy uwzględnić podczas korzystania z tej techniki. –

+0

Dzięki, to działało jak czar! Świetna robota. – riaandelange

1

Jak inni stwierdzili, oryginalne hasło nie może zostać odzyskane, i nie należy zazwyczaj zapewniają mechanizm do odzyskiwania haseł e yways (po prostu zresetuj je). Jeśli jednak Twoim celem jest zresetowanie hasła do znanej wartości, można to zrobić w następujący sposób:

MembershipUser usr = Membership.GetUser("username", false); 
string resetPassword = usr.ResetPassword(); 
usr.ChangePassword(resetPassword, "yayiknowthepassword"); 
Powiązane problemy