2009-07-25 19 views
10

Colpire un roadblock mentre si implementa uno sub domain based language switcher (it.domain.com carica inglese, jp.domain.com carica giapponese).ASP.NET MVC - autenticazione/appartenenza cross domini

Come si può far funzionare un singolo sistema di appartenenza su più sottodomini (ASP.NET MVC C#)?

Ho visto qualcosa sull'aggiunta di domain="domain.com" a <forms > voce in web.config. Ha funzionato, ma funziona quando si verifica su un server Web di sviluppo di Visual Studio locale?

+0

possibile duplicato del [autenticazione basata su form in tutta sottodomini] (http://stackoverflow.com/questions/608120/forms-authentication-across-sub-domains) – rcdmk

risposta

7

Prova a creare il cookie da solo.

In AccountController troverete questo:

FormsAuthentication.SetAuthCookie(userName, createPersistentCookie); 

che "crea e aggiunge alla collezione cookie". Non consente la modifica del dominio (ma consente modifiche del percorso, stranamente). Invece di creare un cookie senza aggiungere alla collezione, modificare le proprietà necessarie, quindi aggiungere alla collezione:

var a = FormsAuthentication.GetAuthCookie(userName, createPersistentCookie); 
//if you're debugging right here, a.Domain should be en.example.com; change it 
a.Domain = "example.com"; 
HttpContext.Current.Response.Cookies.Add(a); 

James

+0

Ottima idea ... anche se ho già deciso di rottamare usando sottodomini per la scelta della lingua, questo è uno da ricordare. Grazie! – Chaddeus

+0

Questo non ha funzionato per me. Sto usando EF6 MVC 4 ... hai qualche consiglio? – ilans

0

Il tuo problema è come i browser inviano i cookie durante la richiesta.

Il cookie è generalmente associato a un singolo dominio, questo è per motivi di sicurezza e prestazioni. Ad esempio, l'utente non desidera inviare cookie per il proprio dominio a nessun altro dominio, poiché il cookie potrebbe contenere informazioni riservate.

Il browser fa la differenza tra i cookie impostati con en.domain.com e jp.domain.com. Non consentono ai cookie di un dominio di passare all'altro perché non si trovano in un dominio padre.

La soluzione al tuo problema sarebbe quella di assumere il controllo della generazione di cookie. Non ho giocato molto con ASP.NET MVC, ma sono sicuro che può essere fatto non attraverso l'HTML ma attraverso una proprietà o qualcosa del genere. Questo è uno scenario molto comune. È necessario impostare il dominio dei cookie su "dominio.com" per le caselle di produzione, ovvero corretto. Se stai lavorando su una casella locale, devi impostare il dominio dei cookie su "".

3

è necessario utilizzare il prefisso di punti, come questo.

<authentication mode="Forms"> 
    <forms domain=".tv.loc" loginUrl="~/signin" timeout="2880" name="auth" /> 
</authentication> 
+1

inoltre, questo funziona solo per domini di secondo livello o superiori, ad esempio '.mydomain' non funziona, ma' .mydomain.com' sarà –

+0

funziona per "localhost"? vale a dire per il debugging in VS? Inoltre è necessario impostare il dominio nel tag del modulo se si imposta il dominio nel cookie? – Rahatur