12

Questa è una delle cose che dovrebbe essere estremamente semplice e non riesco proprio a capire perché non funzioni.Autenticazione tramite web.config non autenticato in ASP.net 3.5

Sto provando a configurare un'autenticazione molto veloce per un'app ASP.net 3.5 ma memorizzare i nomi utente e le password nel file web.config (so che non è molto sicuro ma è un'app interna che continuo a ricevere ha chiesto di aggiungere e rimuovere gli accessi per così questo è il modo più veloce per farlo).

Quindi, la sezione di configurazione relativo assomiglia a questo:

<authentication mode="Forms"> 
    <forms loginUrl="~/login.aspx"> 
    <credentials> 
    <user name="user" password="password" /> 
    <user name="user2" password="password2" /> 
    </credentials> 
    </forms> 
    </authentication> 

    <authorization> 
    <deny users="?"/> 
    </authorization> 

E, nella pagina di login, il look codice come questo:

string username = tbUsername.Text; 
string password = tbPassword.Text; 

if (FormsAuthentication.Authenticate(username, password)) 
    FormsAuthentication.RedirectFromLoginPage(username, false); 

Ma, FormsAuthentication.Authenticate (nome utente, password) restituisce sempre false. E non riesco a capire perché.

Ho anche provato ad utilizzare Membership.ValidateUser ma aggiungo solo un database locale alla cartella App_Data.

C'è qualcosa di veramente di base che sto dimenticando qui o non funziona affatto in .net 3.5?

risposta

13

Non sono sicuro se questo è cambiato in .NET 3.5, ma l'elemento <credentials> ha un attributo passwordFormat che definisce il formato per le password nello web.config. Da MSDN documentation for .NET 3.5, il formato predefinito è SHA1.

Se stai usando nomi utente e le password in chiaro nella tua web.config, si dovrebbe usare:

... 
<credentials passwordFormat="Clear"> 
... 

Event anche se questo è un'applicazione interna sarei ancora raccomando almeno hashing la password invece di lasciarlo in testo chiaro.

+0

Magico, è stato! Un bel po 'di fronte incontra la palma quando l'ho letto. Incredibile cosa si dimentica di un venerdì pomeriggio. Grazie molto! –

2

È necessario specificare <credentials passwordFormat="Clear"> quando si memorizza la password in testo non crittografato.

Le alternative sono password crittografate che utilizzano MD5 o SHA1.

Vedere http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.hashpasswordforstoringinconfigfile.aspx per una funzione per codificare una password.

Si potrebbe anche considerare l'utilizzo di alcuni dei controlli utente disponibili che fanno molto per voi automaticamente. Guarda sotto la sezione "Login" nella casella degli strumenti di controllo in Visual Studio.

La pagina seguente vi fornirà tutto il necessario per questo semplice caso, e l'aspetto del controllo Login è completamente personalizzabile:

<%@ Page Language="C#" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<script runat="server"> 

    protected void Login1_Authenticate(object sender, AuthenticateEventArgs e) 
    { 
     e.Authenticated = FormsAuthentication.Authenticate(Login1.UserName, Login1.Password); 
    } 
</script> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title>Login</title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:Login ID="Login1" runat="server" onauthenticate="Login1_Authenticate"> 
     </asp:Login> 
    </div> 
    </form> 
</body> 
</html> 
2

Un'altra possibile insidia che è che il nome utente "Admin" sembra essere speciale e non onorato se testate un set di credenziali nel web.config

<credentials> 
<user name="Admin" password="somepassword" /> //Authentication always returns false for me 
</credentials> 

<credentials> 
<user name="MyName" password="somepassword" /> //Authentication works normally 
</credentials> 

Il problema non sembra applicabile nel tuo caso, ma ho appena trascorso un'ora per capire che fuori così ho pensato di registrare qui.

-3

trovo che la soluzione ........ prima devi ottenere hashvalue utilizzando FormsAuthentication.HashPasswordForStoringInConfigFile ("abc", "SHA1") nella casella di testo per l'esecuzione del programma e quindi fornire questo valore nella

Problemi correlati