2009-03-03 25 views
25

E 'possibile autenticare gli utenti attraverso sotto-domini quando l'autenticazione si svolge in un sottodominio al posto del dominio padre?autenticazione basata su form in tutta sottodomini

Ad esempio:

utente accede site1.parent.com, e quindi abbiamo bisogno di mandarli a reporting.parent.com.

li posso eseguire l'autenticazione al sito dei report, anche se il log-in si è verificato in un sottodominio?

Finora tutte le ricerche che ho fatto ha utenti che accedono al dominio padre e poi ogni sotto-dominio ha accesso al cookie di autenticazione.

+0

Vedere la mia risposta qui: http://stackoverflow.com/a/14781927/3661 –

risposta

10

È possibile impostare il cookie di essere il dominio padre al momento dell'autenticazione, ma è necessario impostare in modo esplicito che, per impostazione predefinita al pieno dominio che si sta percorrendo.

Una volta che il cookie di autenticazione è correttamente impostato per il dominio principale, quindi tutti i sottodomini dovrebbero essere in grado di leggerlo.

4

Sì, certo. Potrebbe essere necessario eseguire il rollover in alcune fasi, ma dovrebbe essere fattibile.

Un'idea: mentre li si reindirizza attraverso il limite, assegnare loro un token di passaggio unico e quindi comunicare al sottodominio ricevente di aspettarsi (questo utente, da questo IP, con questo token).

29

Quando si autenticare l'utente, impostare il dominio del cookie di autenticazione per il dominio di secondo livello, vale a dire parent.com. Ogni sottodominio riceverà i cookie del dominio genitore su richiesta, quindi l'autenticazione su ciascuno è possibile poiché si avrà 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)); 
+1

Io uso "FormsAuthentication.SetAuthCookie" per impostare il cookie. Qual è la differenza? –

7

Come nota a margine, ho scoperto che dopo aver usato il metodo di JRO che ha funzionato bene uno, il metodo FormsAuthenication.SignOut() non ha funzionato quando chiamato da un sottodominio diverso www /. (Sto cercando di indovinare perché la proprietà .Domain non corrisponde) - Per ovviare a 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); 
      } 
7

Oltre a impostare un cookie di dominio padre anche necessario fare in modo che tutti i siti (app) hanno lo stesso validationKey e decryptionKey() in modo che tutti riconoscano reciprocamente il ticket e il cookie di autenticazione. Abbastanza buono articolo qui http://www.codeproject.com/KB/aspnet/SingleSignon.aspx

3

2 cose da fare:

  1. MachineKey dovrebbe essere lo stesso in tutta web.config (dominio principale e secondaria del dominio (s))
  2. AuthenticationCookie nome di dominio dovrebbe essere lo stesso.

Seguire l'articolo following per ulteriori informazioni.

4

La risposta di Jro funziona correttamente. Ma assicurati di aggiornare l'autenticazione dei moduli webconfig setting "domain" , altrimenti i moduli di autenticazione non funzioneranno correttamente. Here è il problema del signout che ho trovato. Il trucco qui è avere un '.' come prefisso come il dominio è impostato per il cookie come ".parent.com" (utilizzare un cookie di ispezione).

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