Domanda

È possibile autenticare gli utenti tra sottodomini quando l'autenticazione avviene in un sottodominio anziché nel dominio principale?

Ad esempio:

L'utente accede a site1.parent.com, quindi dobbiamo inviarlo a reporting.parent.com.

Posso autenticarli sul sito di segnalazione anche se l'accesso è avvenuto in un sottodominio?

Finora tutta la ricerca che ho fatto ha prima gli utenti che accedono al dominio principale e poi ogni sottodominio ha accesso al cookie di autenticazione.

È stato utile?

Soluzione

È possibile impostare il cookie come dominio principale al momento dell'autenticazione, ma è necessario impostarlo in modo esplicito, verrà impostato automaticamente sul dominio completo in cui ci si trova.

Dopo aver impostato correttamente il cookie di autenticazione sul dominio principale, tutti i sottodomini dovrebbero essere in grado di leggerlo.

Altri suggerimenti

Quando si autentica l'utente, impostare il dominio del cookie di autenticazione sul dominio di secondo livello, ad esempio parent.com. Ogni sottodominio riceverà i cookie del dominio padre su richiesta, quindi l'autenticazione su ciascuno è possibile poiché avrai un cookie di autenticazione condiviso con cui lavorare.

Codice di autenticazione:

System.Web.HttpCookie authcookie = System.Web.Security.FormsAuthentication.GetAuthCookie(UserName, False);
authcookie.Domain = "parent.com";
HttpResponse.AppendCookie(authcookie);
HttpResponse.Redirect(System.Web.Security.FormsAuthentication.GetRedirectUrl(UserName, 
                                                                       False));

Come nota a margine, ho scoperto che dopo aver usato il metodo jro che funzionava bene +1, il metodo FormsAuthenication.SignOut () non funzionava quando chiamato da un sottodominio diverso da www /. (Immagino perché la proprietà .Domain non corrisponde) - Per aggirare questo ho usato:

if (Request.Cookies[FormsAuthentication.FormsCookieName] != null)
            {
                HttpCookie myCookie = new HttpCookie(FormsAuthentication.FormsCookieName);
                myCookie.Domain = "parent.com";
                myCookie.Expires = DateTime.Now.AddDays(-1d);
                Response.Cookies.Add(myCookie);
            }

Oltre a impostare un cookie sul dominio principale, è necessario assicurarsi che tutti i siti (app) abbiano gli stessi validationKey e decryptionKey () in modo che tutti riconoscano reciprocamente i ticket e i cookie di autenticazione. Articolo abbastanza buono qui http://www.codeproject.com/KB/aspnet/SingleSignon.aspx

Sì, certo. Potrebbe essere necessario arrotolare il tuo in alcuni passaggi, ma dovrebbe essere fattibile.

Un'idea: mentre li reindirizzi oltre il confine, dai loro un token di pass una tantum e poi dì al sottodominio di ricezione di aspettarli (questo utente, da questo IP, con questo token).

La risposta di Jro funziona bene. Assicurati di aggiornare le impostazioni di autenticazione dei moduli webconfig " dominio " , altrimenti il ??modulo di autenticazione non funzionerà correttamente. Qui è il problema del signout che ho riscontrato attraverso. Il trucco qui è avere un '.' come prefisso come dominio è impostato per il cookie come " .parent.com " (utilizza un cookie inspector).

<authentication mode="Forms">          
      <forms cookieless="UseCookies" defaultUrl="~/Default" loginUrl="~/user/signin" domain=".parent.com"  name="FormAuthentication" path="/"/>
    </authentication>

2 cose da fare:

  1. MachineKey dovrebbe essere lo stesso in tutto web.config (dominio principale e sottodomini)
  2. AuthenticationCookie domain name dovrebbe essere lo stesso.

Segui le seguendo articolo per una maggiore profondità.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top