2009-03-03 16 views
25

Czy możliwe jest uwierzytelnianie użytkowników w subdomenach, gdy uwierzytelnianie ma miejsce w subdomenie zamiast w domenie nadrzędnej?Uwierzytelnianie za pomocą formularzy między subdomeny

Na przykład:

użytkownik loguje się site1.parent.com, a następnie musimy wysłać je do reporting.parent.com.

Czy mogę je uwierzytelnić w witrynie raportowania, mimo że logowanie nastąpiło w subdomenie?

Do tej pory wszystkie przeprowadzone przeze mnie badania umożliwiły użytkownikom logowanie się najpierw do domeny nadrzędnej, a następnie każda poddomena ma dostęp do pliku cookie służącego do uwierzytelniania.

+0

zobaczyć moją odpowiedź tutaj: http://stackoverflow.com/a/14781927/3661 –

Odpowiedz

10

Możesz ustawić plik cookie jako domenę nadrzędną w czasie uwierzytelniania, ale musisz go jawnie ustawić, domyślnie będzie to pełna domena, w której się znajdujesz.

Gdy plik cookie auth zostanie poprawnie ustawiony na domenę nadrzędną, wszystkie subdomeny powinny mieć możliwość odczytania.

4

Tak, oczywiście. Na niektórych etapach może być konieczne wykonanie własnych, ale powinno być możliwe.

Jedna idea: przekierowując je przez granicę, przekaż je jednokrotnym tokenem, a następnie powiedz subedacji odbiorczej, aby oczekiwała ich (ten użytkownik, z tego adresu IP, z tym tokenem).

29

Po uwierzytelnieniu użytkownika, należy ustawić domenę pliku cookie uwierzytelniania na domenę drugiego poziomu, tj. Nadrzędną.com. Każda poddomena otrzyma na żądanie pliki cookie domeny nadrzędnej, więc możliwe jest uwierzytelnienie każdego z nich, ponieważ będziesz mieć wspólny plik cookie do uwierzytelniania, z którym będziesz mógł pracować.

kod uwierzytelniania:

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

używam "FormsAuthentication.SetAuthCookie", aby ustawić ciasteczko. Jaka jest różnica? –

7

Na marginesie, uważam, że po użyciu metody JRO, który pracował dobrze +1, metoda FormsAuthenication.SignOut() nie działa, gdy wywołana z subdomeny innego niż www /. (Zgaduję, ponieważ nieruchomość .Domain nie pasuje) - Aby obejść ten problem użyłem:

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); 
      } 
3

2 rzeczy do zrobienia:

  1. MachineKey powinny być takie same we wszystkich web.config (domeny głównej i subdomeny (ów))
  2. nazwę domeny AuthenticationCookie powinien być taki sam.

Śledź artykuł following, aby uzyskać więcej informacji.

4

Odpowiedź Jro działa dobrze. Ale upewnij się, że zaktualizowałeś uwierzytelnianie formularzy webconfig setting "domain" , w przeciwnym razie formularz wylogowania z autoryzacji nie będzie działał poprawnie. Here to problem z wylogowaniem, z którym się zetknąłem. Tu trzeba mieć "." jako prefiks jako domena jest ustawiona na plik cookie jako ".parent.com" (użyj inspektora cookie).

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