Autenticazione ASP.NET con un ticket

di Lino Mari, in UserScript, ASP.NET, FormsAuthentication,

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

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi