2016-12-22 24 views
0

我幾乎完成了將RC1中的ASP.NET Core應用程序遷移到1.1.0的過程。一切都很好,直到我嘗試發佈應用程序並將其託管在IIS中。IIS下的ASP.NET Core應用程序 - 無法保持登錄狀態

在調試器中,或直接從Kestrel工作,我沒有問題。我可以訪問我的網站,登錄並正常進行交互。

但是,在IIS下,我可以加載該網站並正確重定向到我的登錄頁面,但儘管使用正確的憑據登錄,我被重定向回主頁並且未登錄。我可以重複此操作一遍又一遍地循環 - 我正在進行身份驗證,但IIS/Core中間件的某些部分不讓我登錄。

我的網站使用的ASP.NET Core Identity與RC1默認VS項目模板。

的AccountController:

// 
    // POST: /Account/Login 
    [HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null) 
    { 
     if (ModelState.IsValid) 
     { 
      var signInStatus = await SignInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, false); 

      if (signInStatus.Succeeded) 
       return RedirectToLocal(returnUrl); 
      ModelState.AddModelError("", "Invalid username or password."); 
      return View(model); 
     } 


     // If we got this far, something failed, redisplay form 
     return View(model); 
    } 

不幸的是,我無法調試這一點,因爲與調試鉤紅隼,並從紅隼本地託管的時候這個問題不存在。我無法將調試器附加到正在運行的Kestrel進程(由IIS啓動) - 我可以連接,但我的斷點不會附加。

我確信上述方法正在被調用。如果我輸入的密碼不正確,我確實會看到「無效的用戶名和密碼」提示。當我「成功」登錄時,我被重定向到原始頁面。問題是重定向後,我沒有登錄 - 導航欄仍然顯示我的登錄按鈕,而不是註銷按鈕,我不能與任何授權的控制器進行交互。

我知道這是一個超級模糊的問題,但很少有來源,但我不知道該從哪裏開始。我希望有人可能會看到我的問題是什麼,並指向正確的方向,或者至少能夠建議我可以採取一些措施來隔離並嘗試調試問題。或者,除此之外,甚至可以提供一些關於我可以添加到我的問題中以提供必要細節的信息。

謝謝!

+0

您確定您的索引頁未被緩存?可能你仍然看到來自匿名用戶的「舊版」?按Ctrl + F5或添加一些查詢字符串來請求非緩存頁面。 – Dmitry

回答

3

兩個起點,你可以嘗試:

  1. 安裝在服務器上的最新Windows Server Hosting bundle
  2. 單擊登錄按鈕後,監視並比較工作系統和損壞系統之間的流量。你是否得到了與破壞系統類似的身份驗證cookie?
+0

Bam!關於cookie的好消息 - 在我的情況下,指向IIS站點的瀏覽器包含兩個* auth cookie,而第一個(按cookie順序)不是預期的。我手動清除這些cookie並刷新頁面並能夠登錄!我不知道我是如何獲得這些額外的餅乾,但解決了問題 - 謝謝! –

+0

您可能想要檢查您是否以不同用戶的身份登錄,以至於不會使用您先前登錄的用戶的Cookie和授權權限 – firste