Form authentication

mercoledì 21 settembre 2005 - 19.53

PEPE Profilo | Senior Member

Salve,
mi stavo informando su come gestire l'autenticazione form con asp.net. Ho letto degli articoli su come confugurare il web config e anche articoli che spiegano come gestire i ruoli e creare delle categorie di utenti. Tutto ciò e' stato molto utile ma quello che non ho capito e' come gestire queste cose attraverso una tabella utenti in un db.

Per caso avete quelche esempio illustrato o qualche link interessante?

Grazie,
Luca.

totti240282 Profilo | Guru

in che senzo nn sai come scrivere gli utenti nel db oppure fare una select per vedere se l'utente può accedere ???

C'è solo un capitano !!!!!!

PEPE Profilo | Senior Member

Ho letto un breve articolo su l'autenticazion e form.
Nell'esempio tiportato il web config viene popolato in questo modo

<authentication mode="Forms">
<forms path="/" loginUrl="FormLogin.aspx" protection="All" timeout="30">
<credentials passwordFormat="Clear">
<user name="kappa" password="test" />
<user name="webngo" password="test" />
<user name="aspitalia" password="test" />
</credentials>
</forms>
</authentication>

<authorization>
<allow users="kappa,webngo,aspitalia" />
<deny users="?" />
</authorization>

poi nel page load

Sub Page_Load()
If User.Identity.IsAuthenticated Then
outMessagge.InnerHtml = "Benvenuto <b>" & User.Identity.Name & "</b><br />" & "Il metodo di autenticazione utilizzato è: <b>" & User.Identity.AuthenticationType & "</b>"
Else
outMessagge.InnerHtml = "Ci spiace ma non sei autenticato"
End If
End Sub

Se io avessi le login e le passqord in una tabella di un db con altre informazioni tipo mail ecc, come cambierebbe il web.config? Non sono riuscito a trovare esempi che spieghino come configurare web.config e pagine aspx se le utenze sono memorizzate su tabella di db.


totti240282 Profilo | Guru

lo fatta al volo

Dim cmd As New OleDb.OleDbCommand("select * from nometabella where utente=?", connessione)
cmd.Parameters.Add("nomeutente", nomeutente)
connessione.Open()
Dim dr As OleDb.OleDbDataReader = cmd.ExecuteReader(CommandBehavior.SingleRow)
If dr.Read = True AndAlso Trim(dr("password")) = password Then
utente notificato.

C'è solo un capitano !!!!!!

PEPE Profilo | Senior Member

Ok perfetto, ma a questo punto tutta la roba nel web.config non viene considerata.

Flusso di controllo dell'autenticazione basata su Form:
Come per ogni pagina, la richiesta è ricevuta da IIS che verifica per prima cosa che l'indirizzo IP ed il dominio dell'utente siano autorizzati. Verificata la validità dell'utente IIS (nel mio caso accesso anonimo) passa la palla a ASP.NET che, come prima cosa, verifica se esiste un cookie di autenticazione all'interno degli header della richiesta.
La presenza di questo cookie implica la sicurezza che l'utente è già stato autenticato ed il cookie contiene l'identità dell'utente. ASP.NET verifica quindi se l'utente possiede le credenziali per accedere alla risorsa richiesta e, in caso affermativo, la invia. In caso contrario l'utente non può accedere alla risorsa.
Se il cookie non è presente negli header della richiesta l'utente viene automaticamente reindirizzato alla pagina contente il form di login personalizzato. L'utente inserisce le credenziali che verranno verificate. In caso l'utente venga riconosciuto viene aggiunto agli header il cookie di autenticazione e la richiesta viene inviata per l'autenticazione alla fase successiva. Come in precedenza ASP.NET verifica le credenziali dell'utente che viene indirizzato o meno alla risorsa.

Quello che credo si debba fare è far creare questo benedetto cookie quando effettuo l'autenticazione nel modo in cui mi hai fatto vedere.

Però a questo punto mi sorge un'altro dubbio:
<authentication mode="Forms">
<forms
name="nome_del_cookie"
path="path_del_cookie"
loginurl="url_di_login"
protection="All|None|Encryption|Validation"
timeout="minuti_di_vita_del_cookie"
/>
<credentials passwordFormat="Clear|SHA1|MD5">
<user name="username" password="password" />
</credentials>
</forms>
</authentication>
name Specifica il nome del cookie di autenticazione che verrà creato
path Specifica il path per cui il cookie è valido. Normalmente viene impostato a / per proteggere il sito completo
loginurl Specifica il percorso virtuale del file contenente il form di accesso
protection Specifica il livello di protezione per il cookie:
• All: utilizza sia la crittografia che la convalida dei dati;
• None: utilizzata se viene utilizzata una convalida personalizzata;
• Encryption: il cookie è criptato ma non viene eseguita la convalida dei dati;
• Validation: viene eseguita la convalida dei dati e il cookie non è criptato.
timeout Specifica i minuti per la scadenza del cookie

La crittografia delle credenziali nel caso in qui effettuo il login sul database non viene miminamente considarato...è corretto?

Io avevo pensato di fare in questo modo ma non so se e' corretto.
web.config
----------------
<authentication mode="Forms">
<forms path="/" loginUrl="login.aspx" protection="All" timeout="30"></forms>
</authentication>


Nella pagina di login quando l'utente digita login e password avvio la procedura di acquisizione parametri e controllo sul database.
Quando implemento il metodo submit la login e la password come sono inviate al server?
Cmq se la login e la pass coincidono con i valori del database allora faccio:

FormsAuthentication.RedirectFromLoginPage(txtUsername.Value, False)
Che fa sto metodo?

Spero di non essere stato noioso.....che e' quello che credo :D:D.





totti240282 Profilo | Guru

nn fa altro che reindirizzare l'utente verso la pagina che aveva richiesto,creando o un cookie temporaneo o meno.

C'è solo un capitano !!!!!!

PEPE Profilo | Senior Member

E si!!
infatto sto vedendo proprio quello.

Mo provero' a vedere come funzionano i certificati.
Grazie per il consiglio.

Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5