2014-04-29 14 views
8

śledzę OAuth 2.0 odpowiedzialnego przykładowy kod Server http://www.asp.net/aspnet/overview/owin-and-katana/owin-oauth-20-authorization-serverJaki jest prawidłowy sposób uruchomienia oprogramowania pośredniego OWIN cookie ustawionego na tryb uwierzytelniania pasywnego?

Jak również patrząc na opakowaniu samorodek pakiet Microsoft.aspnet.identity.samples (install-pakiet Microsoft.aspnet.identity.samples -Pre)

i próbuję zrozumieć, jak działa pasywne i aktywne oprogramowanie pośredniczące do plików cookie.

W przykładzie serwera autoryzacji plik cookie "Aplikacja" jest ustawiony jako pasywny. W próbce tożsamości, "ApplicationCookie" jest aktywne.

Kiedy czytam o tej właściwości, wyjaśnia ona, że ​​pasywne oprogramowanie pośrednie jest wyzwalane tylko wtedy, gdy żąda tego pasujący typ AuthenticationType.

Gdybym edytować plik startup.auth.cs w Microsoft.aspnet.identity.samples i ustawić ciasteczko aplikacji do bierny, a następnie zalogować się, wydaje się, aby potwierdzić, ale nie rejestruje mnie.

Kopiąc głębiej w kodzie, widzę, że kontroler konto sprowadzają się do wywołania SignInHelper.SignInAsync

metoda ta pobiera claimsidentity od użytkownika, który jest wezwaniem do: CreateIdentityAsync (użytkownik, DefaultAuthenticationTypes.ApplicationCookie)

Oczywiście nie rozumiem czegoś, ponieważ z tego, co czytam i mogę powiedzieć, Plik cookie ma takie samo ustawienie AuthenticationType, co żądanie, ale po wywołaniu funkcji Authentication.SignIn plik Cookie nie wydaje się być ustawiony i wracam do strony głównej z opcjami rejestracji i logowania.

Aby powielić ten problem, należy uruchomić aplikację pusty asp.net nowy projekt, a następnie zainstalować pakiet przykładowy Identity, a następnie zmienić app.useCookieAuthentication startup.auth.cs do:

app.UseCookieAuthentication(new CookieAuthenticationOptions { 
      AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
      AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Passive, 
      LoginPath = new PathString("/Account/Login"), 
      Provider = new CookieAuthenticationProvider { 
       // Enables the application to validate the security stamp when the user logs in. 
       // This is a security feature which is used when you change a password or add an external login to your account. 
       OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
        validateInterval: TimeSpan.FromMinutes(30), 
        regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)) 
      } 
     }); 

Próbowałem zmieniając nazwa ciasteczka w startup.auth.cs i dodanie "niestandardowej" nazwy do kodu, który generuje roszczenie bez skutku.

Mam zamiar prowadzić badania, ale myślałem, że w międzyczasie skontaktuję się z tą społecznością.

Odpowiedz

3

Nie jestem pewien dokładnego pytania, jakie masz.

OWIN to potok uruchamiający wszystkie zarejestrowane moduły oprogramowania pośredniego. Można zarejestrować wiele typów uwierzytelniania pośredniego.

Plik cookie odszyfrowuje do tożsamości. Jeśli zmienisz typ uwierzytelniania na zewnętrzny, to będzie to znacznik właściciela w pliku cookie.

Nie jestem pewien, dlaczego nie działa dla Ciebie, to jest to, czego używam.(I nie spojrzał na logowania zewnętrznych szablonie)

// Enable the application to use a cookie to store information for the signed in user 
    app.UseCookieAuthentication(new CookieAuthenticationOptions 
      { 
       //just to show bearer 
       AuthenticationType = DefaultAuthenticationTypes.ExternalBearer, 
       LoginPath = new PathString("/Account/Login"), 
      } 

Good explanation of active vs. passive, from Mr. Brock Allen himself.

Aktywny vs pasywny uwierzytelniania middleware

jedno pytanie, które pojawia się - jeśli nowe szablony posiadają stwardnienie OWIN middleware skonfigurowane uwierzytelnianie , który z nich jest naprawdę używany? Cóż, oprogramowanie pośredniczące do uwierzytelniania OWIN ma koncepcję pasywną a aktywną. Aktywne oprogramowanie pośrednie zawsze sprawdza każde przychodzące żądanie i podejmuje próbę uwierzytelnienia wywołania, a jeśli się powiedzie, tworzy element główny, który reprezentuje bieżącego użytkownika i przypisuje go do środowiska hostingu. Z drugiej strony pasywne oprogramowanie pośredniczące sprawdza tylko żądanie, gdy zostanie o to poproszony. W przypadku domyślnych szablonów z Visual Studio 2013 wszystkie skonfigurowane oprogramowanie pośrednie są domyślnie pasywne, z wyjątkiem głównego oprogramowania pośredniczącego do uwierzytelniania plików cookie (okazuje się, że w niektórych szablonach stosowane są dwa pliki cookie typu middleware, z których główny i kolejny dla zewnętrznych dostawców tożsamości, a ten drugi jest oznaczony jako pasywny).

+0

Witaj Williamie, dzięki za to. Przeczytałem kilka razy na blogu i postach Brocka Allena i zasadniczo staram się zrozumieć to stwierdzenie: "Z drugiej strony pasywne oprogramowanie pośredniczące sprawdza tylko prośbę, gdy zostanie o to poproszony". Wydaje się, że sposób, w jaki można go poprosić, to wskazanie typu AuthenticationType, IE: Kiedy tworzysz tożsamość, możesz przekazać jej typ uwierzytelniania. jednak gdy to zrobię, cały mój kod uwierzytelniający się powiedzie, ale plik cookie nie jest ustawiony. Próbuję dowiedzieć się, co muszę zrobić ręcznie, że aktywne oprogramowanie pośredniczące robi automatycznie. – Steve

+0

Aby dodać do powyższego, wiem, że po zmianie linii w kodzie w moim postu AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Passive na AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Active wszystko działa w ten sam sposób, z wyjątkiem z Aktywny plik cookie jest ustawiany po uwierzytelnieniu i jestem zalogowany. Pasywne wszystko działa, ale nie ustawiono pliku cookie. Próbuję ustalić, co powinien zrobić programista, aby wyzwolić generowanie plików cookie, podobnie jak w przypadku aktywnego oprogramowania pośredniego. – Steve

+0

Wywołanie SignIn z tożsamością roszczenia jest tym, co wyzwala generowanie plików cookie, tryb aktywny/pasywny nie powinien wpływać na generowanie plików cookie w ogóle Nie sądzę, –

0

strona działa poprawnie, gdy komentuję poniżej kodowania.

app.UseCookieAuthentication(new CookieAuthenticationOptions 
{ 

AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 

//LoginPath = new PathString("/Login"), 

Provider = new CookieAuthenticationProvider(), 

CookieName = "DefaultAuthenticationTypes", 

CookieHttpOnly = true,    
ExpireTimeSpan = TimeSpan.FromHours(cookieActiveTime), 

}); 

.

+0

hmmm, być może. Więc ? – Wndrr

Powiązane problemy