60 messaggi dal 30 dicembre 2006
ciao, certamente nessuno ti impedisce di farti il tuo sistema di autenticazione, almeno fintanto che l'applicazione è, come dire, casalinga; man mano che sali di livello la faccenda tende a complicarsi un tantino e comunque si preferisce un approccio più formalizzato.
membershipprovider & co costituiscono un'ottima soluzione già pronta e, nondimeno, offrono anche una notevole possibilità di customizzazione per esigenze specifiche.
il punto sta nel fare la fatica, che viene rapidamente ripagata, di imparare almeno i concetti principali per un corretto utilizzo. inoltre, utilizzando le classi già pronte si possono usare anche i vari controlli dell'ide per gestire tutta una serie di operazioni collegate allo status dell'utente.
è chiaro: alla fine si può fare anche con una serie di session('utente_xxx'), ma ammetterai che non è la stessa cosa.

se a questo punto aggiungiamo anche la gestione dei ruoli e profili utente, implementare lo stesso meccanismo 'a-mano' rischia di diventare un'arma a doppio taglio: inizialmente ti sembra di sbrigarti, ma andando avanti puoi facilmente trovarti costretto a scrivere molto più codice di quanto necessario (con gli ovvi problemi di debug e manutenzione).

ti perdi poi la gestione, tramite web.config (location), delle relazioni tra roles e le varie pagine e subdir dell'applicazione;
la creazione degli utenti del sito,la loro registrazione e la modifica del loro profilo e\o password.

e chissà quante altre funzionalità che ora non mi sovvengono o che ignoro :)...

la questione delle 'tante' tabelle create è, come dire, prevalentemente accademica; alla fine, se non si usano, è sufficiente non 'impicciarsi': la loro gestione è a carico delle classi del framework, ma anche qui spendere qualche ora nella comprensione della loro organizzazione non è affatto tempo buttato.

infine il logout...
---------------------------------------------------
nman dice
Non capisco invece il problema del LogOut.
Con la uscita dalla applicazione lo stato della sessione comunque viene perso
pertanto a cosa serve il LogOut?
---------------------------------------------------
beh.. considera che
quando la sessione scade per timeout,
il contenuto viene cancellato anch'esso per cui
non devi fare nulla.
e questo è il caso a cui ti riferisci anche tu;
ma se l'utente chiude semplicemente la pagina del sito,
allora la sessione non si è 'svuotata'
e dovresti usare:
FormsAuthentication.SignOut();
Session.Abandon();
altrimenti rischi che qualcuno possa riaprire il browser,
e navigare ad una qualche pagina del sito senza per questo
essere necessariamente l'utenteche si è 'autenticato'.
quello che in sostanza voglio dire è che l'approccio è radicalmente
diverso da quello desktop: la chiusura della 'form' non equivale necessariamente alla chiusura dell'applicazione.
saluti
zonahobby wrote:
Riferendomi solo al login, è così "brutto" realizzare una pagina dove viene controllata sul db l'esistenza delle user e password ed in caso affermativo attivare un cookie con valore "ok".

sì. perchè ASP.NET ha tutta un'infrastruttura di sicurezza e gestione dei permessi che altrimenti non useresti. siccome ne abbiamo parlato credo già altre 8500 volte, documentati su Forms Authentication, Membership API e provider custom. perchè se la ruota l'hanno già inventata, non vedo il motivo per cui tu debba rimetterti a farla, ripartendo da zero e probabilmente rifacendola anche male (perchè ti manca l'esperienza per farla giusta al primo colpo).
.

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP
67 messaggi dal 17 dicembre 2010
Grazie a tutti per i consigli! Non sono un programmatore professionista ma ho già realizzato un sito web in asp con diverse funzioni: login, forum, mercatino, download ecc ecc. (tutto fatto da zero).
Mi piacerebbe passare ad asp.net, ma allo stesso tempo vorrei avere tutto il codice sotto controllo. Ho provato il membershipprovider dato da net, bellissimo, e tanto facile da implementare quanto imcomprensibile (a me). Bella anche la gestione dei ruli ma la trovo una gestione con una logica imposta che non mi piace.

Ho provato a documentarmi ma non ho trovato un tutorial (recente) che spieghi come realizzare da zero un membershipprovider possibilimente con un numero di campi limitati a usedid, unername, password ed email. (pochi campi fondamentali per la comprensione).

Capisco che ne avrete parlato molte volte, quindi se chiuderete il 3d capisco, ma vorrei spiegare la logica dell'iscrizione al mio sito:

registrazione con i seguenti campi:
username
password
email
provincia
accesso (di default KO)

Dopo la registrazone parte una mail all'utente con scritto l'id.
L'utente dovrà accedere ad un login temporaneo dove dovrà confermare la registrazione inserendo username, passwod e id.
(in questo semplice modo abbiamo la certezza che l'email sia valida)
In automatico il campo accesso sarà OK e quindi potrà accedere alle parti protette. (quindi utenza e role sono in una stessa tabella).

Seguendo la logica del membership provider, dovrei utilizzare una tabella per userid, password ed email, una tabella solo per la privincia ed una tabella per i roles...

Riguardo ai roles poi vedo che è preconfezionata la gestione a cartelle. Mi devo ancora documentare a riguardo e do per scontato si possa fare, ma nel mio caso è utile proteggere una o più aree delle singole pagine. (es: se non sei loggato solo visualizzi il forum. Se sei loggato puoi anche intervenire).

Continuo a documentarmi, vediamo se mi scatta la molla che mi farà apprezzare il membershiprovider.

PS: forse sembrerò polemico verso il membershipprovider, ma non è così, cerco solo di capire se vale la pena perdere un sacco di tempo a comprenderlo o meno.
zonahobby wrote:
Mi piacerebbe passare ad asp.net, ma allo stesso tempo vorrei avere tutto il codice sotto controllo.

ASP.NET ha un modello meno "copia ed incolla di ASP". quindi, ti toccherà imparare un bel po' di cose a corredo. per esempio, ti consiglio di dare un'occhiata ad Entity Framework.
Ho provato a documentarmi ma non ho trovato un tutorial (recente) che spieghi come realizzare da zero un membershipprovider possibilimente con un numero di campi limitati a usedid, unername, password ed email. (pochi campi fondamentali per la comprensione).

fare un provider custom è questione di pochi minuti. vedi ad esempio questo starter kit:
http://lab.aspitalia.com/64/Starter-Kit-Entity-Framework-Provider-Membership-Roles-API.aspx
Riguardo ai roles poi vedo che è preconfezionata la gestione a cartelle. Mi devo ancora documentare a riguardo e do per scontato si possa fare, ma nel mio caso è utile proteggere una o più aree delle singole pagine. (es: se non sei loggato solo visualizzi il forum. Se sei loggato puoi anche intervenire).

per questo dicevo di documentarsi su Forms Authentication. perchè il meccanismo di protezione via web.config è solamente una possibilità, ASP.NET ha un meccanismo sofisticato, per cui si può anche richiamare questi controlli via codice. nel caso specifico, basta fare (in una pagina) User.IsInRole("ruolo") e si può fare un controllo programmatico.
PS: forse sembrerò polemico verso il membershipprovider, ma non è così, cerco solo di capire se vale la pena perdere un sacco di tempo a comprenderlo o meno.

non vale la pena perdere tempo a inventarsi qualche che già esiste, secondo me. specie perchè dubito che, da principianti, riuscirai a tenere presente tutti gli aspetti (soprattutto di sicurezza) che vanno invece sempre tenuti a mente e che usando Membership API ha per gran parte già disponibili. .

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP
67 messaggi dal 17 dicembre 2010
Mah, più che uno starter kit preconfezionato ho trovato molto interessante questo tutorial:
http://www.shiningstar.net/aspnet_articles/customprovider/CustomProvider2.aspx
che spiega passo passo come crearsi un custom membershipprovider partendo da un database custom.
Il problema è che un tutorial molto vecchio che utilizza i Data Access. E non so se è consigliabile seguirlo per imparare e capire.

In maniera del tutto disinteressata ^__^ suggerisco al webmaster di scrivere un bel tutorial passo passo di come creare un membershipprovider da zero, magari senza seguire la logica preimpostata che si trova praticamente ovunque.

Continuo la mia disperata ricerca di documentazione. In caso quando avrò compreso il tutto scriverò il il tutorial... Tra...5 anni eh eh eh ...
zonahobby wrote:
Mah, più che uno starter kit preconfezionato ho trovato molto interessante questo tutorial:

che ti fa arrivare ad avere uno starter kit già pronto. comunque, il tutorial c'è, basta cercare:
http://www.aspitalia.com/ricerca/super.aspx?key=membership+provider
ed eccolo qui:
http://www.aspitalia.com/articoli/asp.net2/membership_provider.aspx
questo fa vedere come crearne uno utilizzando i web service. ma davvero non cambia niente, rispetto a fare le query. non capisco perchè dovreste complicarvi la vita con soluzioni custom, quando invece si tratta solo di implementare una classe, due metodi e qualche query, a prescindere dall'usare un O/RM o no.
.

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP
67 messaggi dal 17 dicembre 2010
custom nel senso che personalmente ho esigenze diverse da quelle preimpostate. Quindi penso che per personalizzarlo ed avere la filiera sotto controllo sia bene partire da zero per capirne il funzionamento.

Per esempio:
non voglio che un utente sia automaticamente iscritto ma voglio che prima riceva una mail con un codice. E solo utilizzando questo codice possa attivare la registrazione.

Di base non trovo tale funzione e dove metto le mani? Non lo sò. Quindi partendo da zero riesco a capire i passaggi e customizzare il codice dove serve.

Scrivo da ignorante in materia quindi potrebbe essere che mi sfugga qualcosa.

Il link lo avevo visto ma non mi sembrava utile visto il problema affrontato, ovvero il sito distribuito su due server. Già ho problemi a gestirne uno su un server, figuriamoci su due!! :)
zonahobby wrote:
non voglio che un utente sia automaticamente iscritto ma voglio che prima riceva una mail con un codice. E solo utilizzando questo codice possa attivare la registrazione.
Di base non trovo tale funzione e dove metto le mani? Non lo sò. Quindi partendo da zero riesco a capire i passaggi e customizzare il codice dove serve.

fa parte del processo di personalizzazione, cioè del codice che ci metti nel provider. nel metodo CreateUser mandi la mail, setti una password temporanea ed inviti l'utente a loggarsi per attivare il suo account. al primo login verifichi se l'utente è attivo o no.
è per questo che si personalizza un provider. nel frattempo, però, se un giorno dovessi decidere di cambiare approccio, potresti farlo senza toccare il resto, perchè hai usato l'infrastruttura di autenticazione ed autorizzazione di ASP.NET.


Il link lo avevo visto ma non mi sembrava utile visto il problema affrontato, ovvero il sito distribuito su due server. Già ho problemi a gestirne uno su un server, figuriamoci su due!!

credo che a te interessi il concetto, non il codice. perchè quando ti ho dato il codice, hai detto che interessava capire il concetto. caso particolare a parte, in quell'articolo è spiegato il concetto di provider. viene presa come scusa quello di farne uno che va in remoto, ma è una scusa, il resto del succo è identico: andare a leggere da un file di testo, da un db, da un servizio, è solo un dettaglio. è tutto quello che sta a monte che cambia.
.

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.