2015-10-16 6 views
12

Wir haben eine ASP.NET MVC 5-Anwendung, die Formularauthentifizierung mit gleitendem Ablauf verwendet hat. Wir haben vor Kurzem die OWIN-Cookie-Authentifizierung aktiviert und es treten Probleme auf, wenn unsere Sitzungen nicht ordnungsgemäß erweitert werden.Warum verlängern meine AJAX-Anfragen keine OWIN MVC-Sitzung?

Zuvor konnte eine Sitzung von einer AJAX xhr-Anforderung erweitert werden. Mit dieser Konfiguration werden sie jedoch nicht erweitert. Ich erhalte für jede Anfrage (sowohl GET als auch POST) eine 200, die verlängert werden sollte, selbst nachdem der Server die Sitzung beendet hat.

Die aktuelle Einstellung ist:

app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType); 

UrlHelper url = new UrlHelper(HttpContext.Current.Request.RequestContext); 
app.UseCookieAuthentication(new CookieAuthenticationOptions() 
{ 
    AuthenticationType = "Cookies", 
    CookieSecure = CookieSecureOption.SameAsRequest, 
    CookieName = Constants.CatalystPortalCookieName, 
    LoginPath = new PathString(url.Action(nameof(LoginController.Index), "Login")), 
    SlidingExpiration = true, 
    ExpireTimeSpan = TimeSpan.FromMinutes(20), 
    CookiePath = "/", 
}); 

Wenn ich einen Link klicken, um die gesamte Seite verursacht als Dokument Antwort geladen werden, der Server jedoch ordnungsgemäß die Sitzung erstreckt.

+1

verwenden Sie * Session.Abandon * Sitzung zu töten/abmelden? wenn das so ist, ist das nicht korrekt mit OWIN. Mit OWIN sollten Sie AuthenticationManager.SignOut-Methode verwenden –

+1

Wenn Sie die Antwort-Header sehen Sie sehen Dinge wie No-Cache-Set? Wenn dies der Fall ist, können Sie möglicherweise ein Cookie-Konfliktproblem lösen: http://katanaproject.codeplex.com/wikipage?title=System.Web%20represance%20cookie%20integration%20issues – Tratcher

+1

Es könnte sich lohnen, offen zu sein [fiddler] (http://www.telerik.com/fiddler) und prüfen die Anfragen/Antworten. –

Antwort

0

Ich endete mit einigen fehlerhaften Annahmen. Die AJAX-Anfragen wurden verlängert. Die Rückkehr der 200 warf mich ab. Nach einem Blick mit Fiedler auf der tatsächlichen Antwort, sah ich, dass auf OWIN mit der Änderung wird die 401 tatsächlich in der Antwort bewegt:

X-Responded-JSON: {"status":401,"headers":{...foo...}} 

So beendeten wir die Einrichtung nur den Status der Antwort auf 401 zurück. Das ist wahrscheinlich schrecklich, aber es passt zu unseren Bedürfnissen.

protected void Application_EndRequest() { 
    var context = new HttpContextWrapper(Context); 
    var header = context.Response.Headers["X-Responded-JSON"]; 
    if (header != null && header.Contains("\"status\":401")) { 
     Context.Response.Clear(); 
     Context.Response.StatusCode = 401; 
    } 

Hier ist wohl eine robustere Lösung: OWIN: unauthorised webapi call returning login page rather than 401

Verwandte Themen