Autenticazione ASP.NET con un ticket

di , 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

Autenticazione ASP.NET con un ticket (#597) 810 33
| 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