2015-05-20 16 views
6

Mam starszą aplikację do tworzenia formularzy internetowych i opracowuję nową wersję MVC, aby ją zastąpić. Oba muszą biegać ramię w ramię przez jakiś czas i potrzebuję pojedynczego logowania do pracy. Wcześniej użytkownicy logowali się za pomocą aplikacji formularzy internetowych i udało mi się ustawić uwierzytelnianie formularzy w taki sposób, że aplikacja MVC mogła uwierzytelnić się za pomocą pliku cookie.OWIN Uwierzytelnianie plików cookie między ASP.NET MVC i Webforms Aplikacje z tym samym kodem MachineKey

Nowe formularze logowania są już gotowe w aplikacji MVC i użytkownicy będą teraz musieli się z nich zalogować. Aplikacja MVC używa Identity 2.x i OWIN. Początkowo próbowałem skonfigurować plik cookie OWIN tak, aby był zgodny z ustawieniami w starszej wersji formularza internetowego, ale nie mógł pobrać aplikacji internetowej, aby odczytał plik cookie i uwierzytelnił użytkownika.

Od tego czasu zdecydowałem się zainstalować Indentity 2.x i OWIN w aplikacji webform. Ustawiłem identyczne ustawienia. Wygaśnięcie to 30 minut, a Domena to "", a Ścieżka to "/". Widzę plik cookie generowany z aplikacji MVC, ale nie jest on odbierany przez aplikację webform. Nadal otrzymuję komunikat o odmowie dostępu.

app.UseCookieAuthentication(new CookieAuthenticationOptions 
     { 
      AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Active, 
      AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
      CookieName = Settings.Default.CookieName, 
      CookiePath = Settings.Default.CookiePath, 
      CookieDomain = Settings.Default.CookieDomain, 
      LoginPath = new PathString(Settings.Default.CookieLoginPath), 
      ReturnUrlParameter = Settings.Default.CookieReturnUrl, 
      ExpireTimeSpan = Settings.Default.CookieExpireTimeSpan, 
      SlidingExpiration = Settings.Default.CookieSlidingExpiration, 
      Provider = new CookieAuthenticationProvider 
      { 
       OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
        validateInterval: TimeSpan.FromMinutes(30), 
        regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)) 
      } 
     }); 

Pozostawiłem ustawienia maszyny perkusyjnej (które wcześniej działały w celu uwierzytelniania formularzy) takie same. Usunąłem jednak uwierzytelnianie formularzy z obu plików konfiguracyjnych.

Czy źle skonfigurowałem coś lub czy jest wymagana większa konfiguracja, aby umożliwić współdzielenie pliku cookie OWIN pomiędzy aplikacjami z tym samym urządzeniem?

UPDATE

  1. stworzył nową aplikację WebForms z indywidualnymi kontami użytkowników.
  2. Dodano MachineKey
  3. Zmieniono konfigurację MVC app standardowe ustawienia (replikacji nowego projektu)

Nowy webforms aplikacja wymienia ciasteczko, ale nie będzie jeszcze uwierzytelnienia użytkownika.

UPDATE Zobacz odpowiedź poniżej.

Odpowiedz

2

Po utworzeniu dwóch nowych aplikacji i uruchomieniu tego działania, wstrzymuję linię bazową i pracuję wstecz, dopóki nie osiągnąłem celu Single Sign on między aplikacjami. Odkryłem wiele rzeczy, w tym;

  1. Urządzenie MachineKey nie jest wymagane do pojedynczego logowania między aplikacjami dla wersji 4.5 i nowszych. <httpRuntime targetFramework="4.5"/> to wszystko, czego potrzebujesz.
  2. Wyłącz uwierzytelnianie formularzy z A co najważniejsze, nie próbuj ręcznie integrować Tożsamości 2.x i OWIN przez kopiowanie z projektu podstawowego, ponieważ może Ci zabraknąć przestrzeni nazw lub ważnych plików. Projekt będzie budował i prowadził i dosłownie doprowadzał cię do szału, próbując znaleźć to, co przegapiłeś. Użyj pakietów nuget i usuń to, czego nie potrzebujesz.

Tak więc w końcu musiałem dodać Identity 2.x i OWIN do mojej aplikacji webformów, zasadniczo aktualizując ją do nowego potoku uwierzytelniania w 4.5, aby działał.

Mam nadzieję, że ten post pomoże uratować komuś cenny czas i wysiłek.

WAŻNE UPDATE: Kiedy próbuje wdrożyć w IIS, nawet jeśli nie mają żadnych kluczy maszynowych określonych w konfiguracji (i że działa lokalnie) nie zadziała, gdy wdrażane. W końcu użyłem aplikacji MVC jako aplikacji nadrzędnej i aplikacji webowej jako dziecko, co wymagało skonfigurowania aplikacji nadrzędnej;

<machineKey decryptionKey="AutoGenerate" validationKey="AutoGenerate" /> 
+1

Dzięki za udostępnienie! Stawiam czoła tym samym wyzwaniom, czy masz jakiś kod źródłowy, który możesz nam udostępnić? –

Powiązane problemy