5

Mam kilka aplikacji hostowanych na tym samym serwerze IIS (różne kontekstowe katalogi główne), które są chronione przy użyciu pakietów NuGet Microsoft.ASPNet.Identity 2.1. Jednak w chwili, gdy loguję się do jednej z aplikacji, następna wizyta w którejkolwiek z pozostałych aplikacji powoduje, że muszę się ponownie zalogować. Nie mogę zalogować się w więcej niż jednej aplikacji jednocześnie.Używanie tożsamości ASP.Net w wielu aplikacjach WWW

Zgaduję, że wszyscy używają tego samego pliku cookie do przechowywania tokenu logowania, więc po zalogowaniu się w jednej aplikacji resetuje plik cookie, który staje się nieprawidłowy dla żądań do innych aplikacji.

Jakie są moje opcje rozwiązania tego problemu? Nie mam nic przeciwko konieczności logowania się do każdej aplikacji indywidualnie, więc czy każda aplikacja może być skonfigurowana do używania innego pliku cookie?

Alternatywnie, każda aplikacja ma w rzeczywistości dzielić tę samą tabelę użytkownika w DB, więc to może być możliwe, aby skonfigurować go tak, że po zalogowaniu się do jednej z aplikacji, inni także stać zalogowany.

+0

Kiedy mówisz WebAPI tożsamość, masz na myśli ASP.NET Identity? – Luke

+0

Przepraszam, tak, pakiety Microsoft.AspNet.Identity Nuget. Nie wiem, dlaczego myślałem, że nazywa się to tożsamością WebApi. Dzięki, że mnie poprawiłeś. –

+0

Okey dokes.Przepraszam, tylko upewniam się :) – Luke

Odpowiedz

2

Tak, dzieje się tak dlatego, że na "localhost" udostępniasz ten sam plik cookie. Tak się nie stanie podczas produkcji, ponieważ pliki cookie są tylko domeną. (chyba że wszystkie aplikacje są wdrażane w tej samej domenie).

Jest to dość irytujące na localhost, ale łatwe do rozwiązania. Po prostu zmień nazwę pliku cookie dla każdej aplikacji.

To zależy od wersji tożsamości do wersji, ale coś takiego jest to, czego szukasz:

app.UseCookieAuthentication(new CookieAuthenticationOptions 
{ 
    CookieName = "MyApp1", // <-- add this, with different names for each app 
    // ... 
}); 

zwykle znaleźć na Startup.Auth.cs lub Startup.cs pliku.

Jeśli używasz tego samego pliku cookie we wszystkich aplikacjach (jeśli udostępniają one subdomain.domain), musisz uzyskać nazwę MachineKey (validationKey i deszyfrowanie) i taką samą nazwę pliku cookie we wszystkich aplikacjach.

coś takiego na web.config:

<machineKey 
    validationKey="..." <-- some valid validation key 
    decryptionKey="..." <-- some valid decryption key 
    validation="SHA1" 
    decryption="AES"/> 
+0

. Dzięki temu Bart - Coulton był trochę szybszy w odpowiedzi, więc oznaczyłem go jako poprawny, przepraszam ... ale na pewno sprawdzę twój dodatek o udostępnianiu plików cookie we wszystkich aplikacjach - dzięki jeszcze raz –

+0

@SimonGreen pewnie! nie ma za co przepraszać. Cieszę się, że udało ci się to rozwiązać (to jest cała kwestia, nic więcej.) –

+0

Przy okazji pojedynczego wpisania, najbardziej skomplikowane rzeczy sprawiają, że CORS nie jest problemem, który masz. Posiadanie tych samych kluczy szyfrujących i kryptograficznych, aby można je było odczytać ze wszystkich aplikacji, a otrzymasz za darmo jedno logowanie. ** zauważ, że ** jest to * tylko *, ponieważ jesteś na tej samej poddomenie/domenie. –

Powiązane problemy