Condividi tramite


Procedura: personalizzare il cookie di autenticazione dal servizio di autenticazione WCF

Aggiornamento: novembre 2007

In questo argomento viene illustrato come personalizzare il cookie di autenticazione (ticket) per il servizio di autenticazione ASP.NET quando utilizzato come servizio Windows Communication Foundation (WCF). La personalizzazione del cookie di autenticazione è opportuna se si desidera archiviare al suo interno dati specifici dell'utente durante l'autenticazione.

Nota:

In genere, l'archiviazione dei dati specifici dell'utente nelle proprietà del profilo ASP.NET è preferibile rispetto all'archiviazione nel cookie. I dati nelle proprietà del profilo non sono associati a un computer né limitati alla durata del cookie. Inoltre, l'archiviazione dei dati utente nelle proprietà del profilo è più sicura. La personalizzazione del contenuto del cookie è utile nel caso in cui si possiede una piccola quantità di dati non sensibili e non si vuole utilizzare la funzionalità del profilo ASP.NET.

Il servizio di autenticazione genera l'evento CreatingCookie dopo la convalida delle credenziali utente e prima dell'impostazione del cookie di autenticazione. È possibile personalizzare il cookie creando un gestore eventi per CreatingCookie e gestendo personalmente il cookie di autenticazione. Per accedere al nome utente, alla password e alle credenziali personalizzate, è possibile utilizzare l'oggetto CreatingCookieEventArgs passato al gestore eventi.

L'implementazione WCF del servizio di autenticazione viene utilizzata per connettere un utente da un'applicazione client in grado di inviare e utilizzare un messaggio SOAP 1.1, ad esempio un'applicazione Java.

  1. Nel file Global.asax dell'applicazione Web, creare un gestore eventi per l'evento CreatingCookie.

  2. Nel gestore aggiungere le informazioni alla proprietà CustomCredential del cookie.

    Nell'esempio seguente viene illustrato come personalizzare il cookie di autenticazione aggiungendo il valore della proprietà CustomCredential alla proprietà UserData.

    Sub AuthenticationService_CreatingCookie(ByVal sender As Object, _
                     ByVal e As System.Web.ApplicationServices.CreatingCookieEventArgs)
        Dim ticket As FormsAuthenticationTicket = New _
           FormsAuthenticationTicket _
            (1, _
             e.Username, _
             DateTime.Now, _
             DateTime.Now.AddMinutes(30), _
             e.IsPersistent, _
             e.CustomCredential, _
             FormsAuthentication.FormsCookiePath)
    
        Dim encryptedTicket As String = FormsAuthentication.Encrypt(ticket)
    
        Dim cookie As HttpCookie = New _
            HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket)
        cookie.Expires = DateTime.Now.AddMinutes(30)
    
        HttpContext.Current.Response.Cookies.Add(cookie)
        e.CookieIsSet = True
    End Sub
    
    void AuthenticationService_CreatingCookie(object sender, 
        System.Web.ApplicationServices.CreatingCookieEventArgs e)
    {
        FormsAuthenticationTicket ticket = new
              FormsAuthenticationTicket
                (1,
                 e.UserName,
                 DateTime.Now,
                 DateTime.Now.AddMinutes(30),
                 e.IsPersistent,
                 e.CustomCredential,
                 FormsAuthentication.FormsCookiePath);
    
        string encryptedTicket =
             FormsAuthentication.Encrypt(ticket);
    
        HttpCookie cookie = new HttpCookie
             (FormsAuthentication.FormsCookieName,
              encryptedTicket);
        cookie.Expires = DateTime.Now.AddMinutes(30);
    
        HttpContext.Current.Response.Cookies.Add(cookie);
        e.CookieIsSet = true;
    }
    
  3. Nel metodo Application_Start del file Global.asax, associare il gestore eventi per l'evento CreatingCookie.

    Nell'esempio seguente viene illustrato come associare un gestore all'evento CreatingCookie.

    Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
        AddHandler System.Web.ApplicationServices.AuthenticationService.CreatingCookie, _
            AddressOf Me.AuthenticationService_CreatingCookie
    End Sub
    
    void Application_Start(object sender, EventArgs e)
    {
        System.Web.ApplicationServices.AuthenticationService.CreatingCookie 
            += new EventHandler<System.Web.ApplicationServices.CreatingCookieEventArgs>
            (AuthenticationService_CreatingCookie);
    }
    
  4. Chiamare il servizio di autenticazione da un'applicazione in grado di utilizzare un messaggio SOAP da un servizio Web.

Compilazione del codice

Per il corretto funzionamento degli esempi precedenti, è necessario configurare il servizio di autenticazione su un server Web. Per ulteriori informazioni, vedere Procedura: attivare il servizio di autenticazione WCF.

Sicurezza

Se si passano dati sensibili dell'utente, ad esempio le credenziali di autenticazione, accedere sempre al servizio di autenticazione tramite SSL (Secure Sockets Layer) utilizzando il protocollo HTTPS. Per informazioni sulla configurazione di SSL, vedere Configuring Secure Sockets Layer (IIS 6.0 Operations Guide) (informazioni in lingua inglese).

Vedere anche

Concetti

Cenni preliminari sul servizio di autenticazione di Windows Communication Foundation

Riferimenti

AuthenticationService

CreatingCookieEventArgs