Qualche tempo fa ho dovuto implementare un sistema di accesso con gestione dei roles. Per risolvere il problema ho utilizzato un ticket, che in pratica è un cookie crittografato che permette di conservare alcune informazioni sull'utente.
Il ticket associato ad FormsAuthenticationTicket può contenere informazioni relative all'utente e nel caso specifico, attraverso la proprietà UserData, può archiviare tutti i Roles relativi all'utente. In questo modo quando si ha bisogno di sapere se l'utente ha i privilegi per il servizio o per una determinata operazione, ci basta interrogare la proprietà.
Il codice utilizzato è incluso in una classe:
Public Class Authentication ' costruttore Public Sub New(version As Integer, name As String, issueDate As DateTime, expiration As DateTime, isPersistent As Boolean, userData As String) ' creo un nuovo ticket di tipo FormsAuthenticationTicket ' Username contiene il nome dell'utente ' DateTime.Now.AddMinutes(20) indica la durata del cookie Dim Ticket As FormsAuthenticationTicket = New FormsAuthenticationTicket(1, UserName, DateTime.Now, DateTime.Now.AddMinutes(20), False, strRoles) Dim encTicket As String = FormsAuthentication.Encrypt(Ticket) ' creo il cookie Dim authCookie As New HttpCookie(FormsAuthentication.FormsCookieName, encTicket) ' è possibile specificare un path authCookie.path = "/" ' è possibile specificare l'intero dominio authCookie.domain = "dominio.tld" ' aggiungiamo il cookie ai cookies della risposta HttpContext.Current.Response.Cookies.Add(authCookie) End Sub End Class
Per recuperare le informazioni immagazzinate è possibile utilizzare il campo UserData:
Public Shared Function getRoles() As String Dim authcookie As HttpCookie Dim Ticket As FormsAuthenticationTicket Dim Roles As String ' leggiamo il ticket authcookie = HttpContext.Current.Request.Cookies(FormsAuthentication.FormsCookieName) Ticket = CType(FormsAuthentication.Decrypt(authcookie.Value), FormsAuthenticationTicket) ' leggiamo UserDate Roles = Ticket.UserData return Roles End Function
Per approfondimenti sulla Forms Authentication si veda:
https://www.aspitalia.com/ricerca/super.aspx?key=forms+authentication
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.