ASP.NET_SessionId + OWIN Cookies nicht senden an browser

Ich habe ein seltsames problem mit Owin cookie-Authentifizierung.

Wenn ich beginne meinen IIS-server-Authentifizierung funktioniert einwandfrei auf IE/Firefox und Chrome.

Ich begann dabei einige Tests mit Authentifizierung und Anmeldung auf verschiedenen Plattformen und ich habe mit einem seltsamen Fehler. Sporadisch der Owin-framework /IIS einfach nicht senden Sie keine cookies in den Browsern. Ich geben Sie einen Benutzernamen und ein Passwort korrekt ist, wird der code ausgeführt, aber kein cookie geliefert bekommt an den browser überhaupt. Wenn ich den server neu starten, beginnt es zu arbeiten, dann irgendwann werde ich versuchen, den login und wieder cookies unterbinden geliefert. Stepping über den code, der nichts tut und wirft keine Fehler aus.

 app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationMode = AuthenticationMode.Active,
            CookieHttpOnly = true,
            AuthenticationType = "ABC",
            LoginPath = new PathString("/Account/Login"),
            CookiePath = "/",
            CookieName = "ABC",
            Provider = new CookieAuthenticationProvider
               {
                  OnApplyRedirect = ctx =>
                  {
                     if (!IsAjaxRequest(ctx.Request))
                     {
                        ctx.Response.Redirect(ctx.RedirectUri);
                     }
                 }
               }
        });

Und innerhalb meiner Anmeldung habe ich den folgenden code:

IAuthenticationManager authenticationManager = HttpContext.Current.GetOwinContext().Authentication;
                            authenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);

var authentication = HttpContext.Current.GetOwinContext().Authentication;
var identity = new ClaimsIdentity("ABC");
identity.AddClaim(new Claim(ClaimTypes.Name, user.Username));
identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, user.User_ID.ToString()));
identity.AddClaim(new Claim(ClaimTypes.Role, role.myRole.ToString()));
    authentication.AuthenticationResponseGrant =
        new AuthenticationResponseGrant(identity, new AuthenticationProperties()
                                                   {
                                                       IsPersistent = isPersistent
                                                   });

authenticationManager.SignIn(new AuthenticationProperties() {IsPersistent = isPersistent}, identity);

Update 1: Es scheint, dass eine Ursache für das problem ist, wenn ich die Elemente hinzufügen, um Sitzung die Probleme beginnen. Hinzufügen von etwas einfaches wie Session.Content["ABC"]= 123 scheint zu erstellen das problem.

Was ich machen kann ist wie folgt:
1) (Chrome), Wenn ich mich anmelden bekomme ich ASP.NET_SessionId + meine Authentifizierungs-cookie.
2) ich gehe auf eine Seite setzt, die eine Sitzung.Inhalt...
3) Öffnen Sie ein neues browser (Firefox) und versuchen Sie den login und es keine ASP.NET_SessionId noch tut es erhalten Sie eine Authentifizierungs-Cookie
4), Während der erste browser der ASP.NET_SessionId es weiter zu arbeiten. Die minute, die ich zu entfernen dieses cookie, es hat das gleiche problem wie alle anderen Browser
Ich arbeite auf ip-Adresse (10.x.x.x) und localhost.

Update 2: Force Erstellung von ASPNET_SessionId zuerst auf mein login_load Seite vor der Authentifizierung mit OWIN.

1.) bevor ich die Authentifizierung mit OWIN ich eine zufällige Session.Content Wert auf meiner login-Seite zum starten der ASP.NET_SessionId
2) dann habe ich zu authentifizieren und weitere Sitzungen
3) Andere Browser scheinen jetzt arbeiten

Dies ist Bizarr. Ich kann nur zu dem Schluss kommen, dass dies etwas zu tun mit ASP und OWIN, die denken, Sie sind in verschiedenen Domänen oder sowas.

Update 3 - Seltsames Verhalten zwischen den beiden.

Zusätzliche seltsames Verhalten identifiziert - Timeout von Owin und ASP-session ist anders. Was ich sehe ist, dass meine Owin-Sitzungen sind am Leben zu bleiben, länger als meine ASP-Sitzungen durch einen bestimmten Mechanismus. Also beim einloggen:
1.) Ich habe eine cookied basierte auth session
2.) Ich ein paar session-Variablen

Meine session-Variablen(2) "sterben", bevor der owin-cookie, session-variable Kräfte, re-login, die Ursachen unerwarteten Verhaltens während meiner gesamten Anwendung. (Person angemeldet ist, aber nicht wirklich angemeldet)

Update 3B

Nachdem einige Graben, sah ich einige Kommentare auf einer Seite, die sagen, dass die "Formen" Zeitlimit für Authentifizierung und session-timeout anpassen müssen. Ich denke normalerweise die beiden synchron sind, aber aus irgendeinem Grund sind die beiden nicht synchron.

Zusammenfassung von Workarounds

1) erstellen einer ersten Sitzung vor der Authentifizierung. Im Grunde erstellen Sie die Sitzung, wenn Sie die Anwendung starten Session["Workaround"] = 0;

2) [Experimental], wenn Sie weiterhin cookies stellen sicher, dass Ihre OWIN timeout /Länge länger ist als die sessionTimeout in Ihrer Website.config (in der Prüfung)

Kann bestätigen, dass das hinzufügen einer session aufrufen zu ActionResult Login und ActionResult ExternalLogin das Problem behoben. Ich bin sicher, dass nur eine benötigt wird, aber ich habe sowohl im Ort.
Danke!...Hinzufügen Session in ExternalLogin fest für mich...das ist voodoo-Zauber...ich habe bereits verschwendet 6 Uhr an Jagd auf dieses Problem hin..

InformationsquelleAutor Piotr Stulinski | 2013-12-23

Schreibe einen Kommentar