2014-04-29 3 views
8

Ich habe http://www.asp.net/aspnet/overview/owin-and-katana/owin-oauth-20-authorization-serverWas ist der richtige Weg, um die OWIN-Cookie-Middleware auszulösen, die auf den passiven Authentifizierungsmodus gesetzt ist?

am Nugget Paket Microsoft.aspnet.identity.samples Paket

Neben der Suche nach dem OAuth 2.0 Autorisierungsserver Beispielcode wurde (Installationspaket Microsoft.aspnet.identity.samples -Pre)

und versuche herauszufinden, wie passive vs. aktive Cookie-Middleware funktioniert.

Im Beispiel des Autorisierungsservers wird das Cookie "Application" auf passiv gesetzt. In den Identity-Beispielen ist "ApplicationCookie" aktiv.

Wenn ich über diese Eigenschaft lese, wird erklärt, dass passive Middleware nur ausgelöst wird, wenn sie von einem passenden AuthenticationType angefordert wird.

Wenn ich die startup.auth.cs Datei im Microsoft.aspnet.identity.samples bearbeiten und die Anwendung Cookie passiv eingestellt, dann melden Sie sich an, so scheint es, zu überprüfen, aber nicht log mich nicht in.

Graben tiefer in den Code, ich sehe, dass das Konto Controller einkochen zu einem Aufruf an SignInHelper.SignInAsync

Diese Methode gibt eine claimsidentity vom Nutzer betrieben wird, die einen Anruf: CreateIdentityAsync (user, DefaultAuthenticationTypes.ApplicationCookie)

Ich verstehe offensichtlich etwas nicht, da von dem was ich lese und erzählen kann, th Der Cookie hat den gleichen AuthenticationType wie der Claim, aber wenn der Authentication.SignIn aufgerufen wird, scheint der Cookie nicht gesetzt zu sein und ich werde auf die Hauptseite mit Optionen zur Registrierung und Anmeldung zurückgeleitet.

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

ich die Veränderung haben versucht:

Um das Problem zu duplizieren, um ein neues Projekt leer asp.net Anwendung starten, dann die Identität Probe-Paket installieren, dann startup.auth.cs der app.useCookieAuthentication zu ändern Cookie-Name in der Datei startup.auth.cs und Hinzufügen des "benutzerdefinierten" Namens zu dem Code, der den Anspruch ohne Erfolg generiert.

Ich werde weiter forschen, dachte aber, ich würde in der Zwischenzeit die Community erreichen.

Antwort

3

Ich bin mir nicht sicher über die genaue Frage, die Sie haben.

OWIN ist eine Pipeline, die alle registrierten Middleware-Module ausführt. Sie können mehrere Authentifizierungstypen für Middleware registrieren.

Der Cookie entschlüsselt die Identität. Wenn Sie den Authentifizierungstyp auf externen Träger ändern, wird dies ein Bearer-Token im Cookie sein.

Ich bin mir nicht sicher, warum es nicht für Sie funktioniert, das ist was ich benutze.(Ich habe nicht an dem externen Logins der Vorlage sehe)

// 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.

Aktiv vs Passive Authentisierung Middleware

Eine Frage, die sich stellt - wenn die neuen Vorlagen mehr OWIN Authentifizierungs-Middleware haben konfigurierte , was wird dann wirklich benutzt? Nun, OWIN-Authentifizierungs-Middleware hat das Konzept von passiv vs. aktiv. Aktive Middleware überprüft immer alle eingehenden Anforderungen und versucht, den Aufruf zu authentifizieren. Wenn sie erfolgreich sind, erstellen sie einen Prinzipal, der den aktuellen Benutzer darstellt, und weisen diesen Prinzipal der Hostumgebung zu. Passive Middleware hingegen prüft die Anfrage nur auf Nachfrage. Bei den Standardvorlagen von Visual Studio 2013 sind alle konfigurierten Middlewares standardmäßig passiv, mit Ausnahme der "Haupt" -Cookie-Authentifizierungs-Middleware (es stellt sich heraus, dass es zwei Cookie-Middlewares gibt, die in einigen Vorlagen verwendet werden - die Haupt-und ein anderes für externe Identitätsprovider und dieses andere ist als passiv gekennzeichnet).

+0

Hallo William, Danke für das. Ich habe den Blog von Brock Allen gelesen und poste ein paar Mal darüber und versuche im Wesentlichen, diese Aussage herauszufinden: "Passive Middleware hingegen prüft nur die Anfrage, wenn sie dazu aufgefordert wird." Es scheint, die Art, es zu fragen, ist, den AuthenticationType, IE anzugeben: Wenn Sie einen Anspruch erstellen, können Sie ihm einen Authentifizierungstyp übergeben. Aber wenn ich das tue, ist mein Authentifizierungscode erfolgreich, aber der Cookie ist nicht gesetzt. Ich versuche herauszufinden, was ich manuell tun muss, dass aktive Middleware das automatisch macht. – Steve

+0

Um zu den oben genannten hinzuzufügen, weiß ich, dass, wenn ich die Zeile im Code in meinem Beitrag ändern AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Passive zu AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Active funktioniert alles auf die gleiche Weise außer Mit Active wird der Cookie nach der Authentifizierung gesetzt und ich bin eingeloggt. Passive alles funktioniert aber kein Cookie ist gesetzt. Ich versuche herauszufinden, was ein Entwickler tun muss, um die Cookie-Generierung wie eine Active Middleware auszulösen. – Steve

+0

Calling SignIn mit einer Claims-Identität ist das, was die Cookie-Generierung auslöst, der Aktiv/Passiv-Modus sollte die Cookie-Generation überhaupt nicht beeinflussen Ich glaube nicht, –

0

Seite funktioniert gut, wenn ich unter Kodierung kommentieren.

app.UseCookieAuthentication(new CookieAuthenticationOptions 
{ 

AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 

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

Provider = new CookieAuthenticationProvider(), 

CookieName = "DefaultAuthenticationTypes", 

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

}); 

.

+0

hmmm, vielleicht. Damit ? – Wndrr

Verwandte Themen