Può succedere di dover condividere l'autenticazione tra differenti applicazioni sotto lo stesso virtual host, sia omogenee (tutte 2.0) che eterogenee (2.0 e 1.0).

Il problema è facilmente sorpassabile utilizzando l'elemento MachineKey del file di configurazione: specificando un machinekey identico, si possono condividere i cookie tra applicazioni diverse.

Per esempio, se io ho

 <machineKey   validationKey="99AF6556D754949EF4171355D5D538930DCCF674453E4F3882B240B011A7381CD86A79C1D317B7ADD94E7781F816C319D67E5555DFD0EC969719DC1EB166A9ED"
decryptionKey="DA2056148C0642A11D9CDBB79F67BCB631D8A1A20BC75935" />

(Se si cerca di far condividere l'autenticazione tra 1.1 e 2.0, nel machinekey dell'applicazione 2.0 bisogna aggiungere "validation="3DES" " in quanto l'algoritmo di default di 2.0 è MD5 e quindi non funzionerebbe la decriptazione dei token 1.1)

subito dopo System.web nei web.config delle due applicazioni, avrò accesso ai cookie dell'una e dell'altra, ovviamente a patto che siano applicazioni differenti ma sotto lo stesso dominio.

In questo modo, impostando il cookiename uguale (parametro "name" della sezione "forms" sotto "authentication"), avrò l'autenticazione condivisa tra le due applicazioni, altrimenti posso settare name differenti, e leggere l'autenticazione dell'una o dell'altra utilizzando la semplice Request.Cookie.

Attenzione che il cookie di autenticazione è criptato. Devo prendere un ticket passando dalla classe FormsAuthenticationTicket in questo modo:

HttpCookie cookie = Request.Cookie(".FormsAuthCookieName"); FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie.Value);

A questo punto ho a disposizione i dati dell'utente per farci quello che desidero :)