2015-10-16 1 views
12

フォーム認証とスライド有効期限を使用しているASP.NET MVC 5アプリケーションがあります。私たちは最近、OWIN Cookie認証に切り替え、正しくセッションが拡張されないという問題が発生しています。私のAJAX要求がOWIN MVCセッションを拡張しないのはなぜですか?

以前は、AJAX xhr要求からセッションを拡張することができました。しかし、この構成では、拡張されません。サーバーがセッションを終了した後であっても、私はすべての要求(GETとPOSTの両方)に対して200を受け取っています。

現在の設定は次のとおりです。

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 = "/", 
}); 

私はページ全体が文書の応答としてロードされるようにするリンクをクリックした場合、ただし、サーバーが正常にセッションを拡張します。

+1

あなたは、セッション/ログアウトを殺すために* session.abandon *を使用していますか?もしそうなら、それはOWINの正しい方法ではありません。 OWINではAuthenticationManager.SignOutメソッドを使用する必要があります –

+1

レスポンスヘッダーを見ると、no-cache setのようなものが見えますか?もしそうなら、あなたはクッキー競合の問題にぶつかっているかもしれません:http://katanaproject.codeplex.com/wikipage?title=System.Web%20response%20cookie%20integration%20issues – Tratcher

+1

オープンしている価値があるかもしれません[フィドラー](http: /www.telerik.com/fiddler)、リクエスト/レスポンスを調べます。 –

答えて

0

私はいくつかの間違った前提を持っていました。 AJAXリクエストが延長されました。 200の復帰は私を捨てていた。実際の応答でシオマネキを見た後、私はOWINへの変更で、401が実際に応じて移動していることを見た:

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

だから、私たちは戻って401への応答のステータスを設定することになりました。それはおそらく恐ろしいですが、私たちのニーズに合っています。

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

はここでおそらく、より堅牢なソリューションです:OWIN: unauthorised webapi call returning login page rather than 401

関連する問題