Single Sign On con metodi differenti di autenticazione
E' il caso di applicazioni che effettuano autenticazione in modo differente (ad esempio, la prima con il proprio database e la seconda con membership API o altre forme di autenticazione). In questo caso il ticket di autenticazione non è adatto per entrambe le applicazioni in quanto conterrebbe solo lo username dell'utente loggato.
In questo caso per la seconda applicazione va creato un cookie ad hoc e, ovviamente, va mappato lo user della prima applicazione nella seconda. Supponiamo di avere un utente "Paolino Paperino" nella prima applicazione che viene riconosciuto come "ppaperino" nella seconda.
Nella prima applicazione aggiungeremo il seguente codice:
FormsAuthenticationTicket fat = new FormsAuthenticationTicket(1, "ppaperino", DateTime.Now, DateTime.Now.AddYears(1), true, "");
HttpCookie cookie = new HttpCookie(".App2Auth");
cookie.Value = FormsAuthentication.Encrypt(fat);
cookie.Expires = fat.Expiration;
HttpContext.Current.Response.Cookies.Add(cookie);
FormsAuthentication.RedirectFromLoginPage("Paolino Paperino");
Attenzione che nel web.config i due cookie devono avere nomi diversi, a differenza del caso precedente.
Volendo operare al contrario (dalla seconda applicazione alla prima) va aggiunto il seguente codice:
FormsAuthenticationTicket fat = new FormsAuthenticationTicket(1, "Paolino Paperino", DateTime.Now, DateTime.Now.AddYears(1), true, "");
HttpCookie cookie = new HttpCookie(".App1Auth");
cookie.Value = FormsAuthentication.Encrypt(fat);
cookie.Expires = fat.Expiration;
HttpContext.Current.Response.Cookies.Add(cookie);
FormsAuthentication.RedirectFromLoginPage("ppaperino");
Anche in questo caso vale il discorso di aggiungere il <machinekey> nel web.config, esattamente come nell'esempio precedente.
Technorati tags:
Autenticazione