La Forms Authentication di ASP.NET non supporta in maniera proprio semplice l'assegnazione, in fase di login, dei ruoli (roles) associati all'utente.
In genere queste informazioni sono salvate in cookie o variabili session, ma è possibile aggiungerle facilmente, attraverso l'uso di un Authentication Ticket, allo stesso cookie di autenticazione.
Dovremo definire una funziona Authenticate, da invocare una volta che il login è andato a buon fine, come la seguente:
public void Authenticate (string Username) {
// preparo l'autenticazione
FormsAuthentication.Initialize();
string roles = GetRoles(Username);
// genero il ticket
FormsAuthenticationTicket fat = new FormsAuthenticationTicket(1,
Username, DateTime.Now,
DateTime.Now.AddMinutes(20), // 20 minuti
false, roles, FormsAuthentication.FormsCookiePath);
// creo il cookie di autenticazione
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(fat));
Response.Cookies.Add(cookie);
// Return URL dopo autenticazione
if (Request["ReturnUrl"] == null)
Response.Redirect("/");
Response.Redirect(Request["ReturnUrl"]);
}
private string GetRoles(string Username) {
// estrazione dei roles dal database, separati da ;
return "admins;users";
}La funzione GetRoles servirà per caricare da database i roles associati all'utente, separati da ;.
Infine dovremo intercettare l'evento Application_AuthenticateRequest dell'applicazione ASP.NET attraverso il global.asax o, meglio ancora, un HttpModule:
// l'utente cerca di autenticarsi
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
if (!HttpContext.Current.User.IsAuthenticated)
return;
// carico l'utente e recupero il ticket
FormsIdentity identity = (FormsIdentity) HttpContext.Current.User.Identity;
FormsAuthenticationTicket ticket = identity.Ticket;
// carico i roles dal ticket del cookie
String[] roles = ticket.UserData.Split(';');
// sovrascrivo User con un nuovo GenericPrincipal
HttpContext.Current.User = new GenericPrincipal(identity, roles);
}
}Nella funzione non faremo altro che caricare dal ticket i roles e sovrascrivere l'User corrente con un nuovo GenericPrincipal.
Per approfondimenti sulla Forms Authentication, si veda:
Autenticazione di ASP.NET: Forms Authentication
http://www.aspitalia.com/articoli/aspplus/formauth.aspx
Autenticazione di ASP.NET: Forms Authentication con roles
http://www.aspitalia.com/articoli/aspplus/formauthroles.aspx
Forms Authentication: un'applicazione multi login
http://www.aspitalia.com/articoli/aspplus/multilogin.aspx
- Architettura del software: le applicazioni web a tre livelli
- Realizzare un controllo custom in ASP.NET AJAX - Prima parte
- #913 - Includere in un file di risorse ed utilizzare Javascript in un custom control per ASP.NET 2.0
- Il mio progetto di migrazione ad ASP.NET 3.5: ASPItalia.com e WinFXItalia.com
- Articolo su ASP.NET e gli standard web su MSDN
- #941 - Gestire al meglio gli eventi RowCommand di GridView e ItemCommand di DetailsView e FormsView con la classe DataControlCommands
- #921 - Specificare un tipo custom come valore di un parametro di selezione dell'ObjectDataSource
- #936 - Aggiungere una riga con il totale calcolato al GridView
- ASP.NET 3.5 Application Services (Membership, Roles, Profile API) sotto Classic ASP con IIS 7.0
- Il nostro nuovo imminente libro in prenotazione: ASP.NET 3.5 per tutti
- #933 - Una GridView con supporto per più righe selezionabili
- Rilasciata la preview 1 di ASP.NET Ajax 4.0
Esprimi il tuo giudizio su questo script:
Per procedere devi essere autenticato.
Ciao a tutti.Ho un po' di problemi a capire come funziona l'autenticazione form con ticket. Intanto spiego quello che mi servirebbe ottenere. Ho un ...
Ho provato il codice ma il metodo SetAuthCookie mi azzera il campo UserData dal cookie che quindi non mi ritrovo più nel global.asax.Uso Vb.net ma ...
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.







Stampa
Snippet
Download 


10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!
Ciao,Sto tentando di utilizzare questo sistema di autenticazione, o meglio quello che hai proposto nel numero 94 del giugno 2005 su INTERNET MAGAZINE...
Continua »»» | Rispondi »»»