2015-11-24 36 views
1

我已經在ASP.NET 5(VNext)中創建了一個應用程序數月,並且一直在穩步地將應用程序升級爲更新版本的ASP.NET 5已經發布。將RC1應用於我的Beta 8應用後,我的Cookie身份驗證停止工作。當一個頁面需要認證/授權時,Web瀏覽器只顯示一個空白屏幕。ASP.NET 5(VNEXT)從Beta 8遷移到RC1之後的Cookie身份驗證問題

在Startup.cs,我有下面的代碼在我ConfigureServices方法:

services.AddAuthentication(); 

在Startup.cs,我在我的配置方法如下代碼:

app.UseCookieAuthentication(options => 
{ 
    options.AccessDeniedPath = new PathString("/Account/AccessDenied"); 
    options.LoginPath = new PathString("/Account/Login"); 
    options.SessionStore = (new MemoryCacheSessionStore()); 
    options.CookieName = "D1_AWARE"; 
    options.LogoutPath = new PathString("/Account/LogOut"); 
    options.ExpireTimeSpan = new TimeSpan(1, 0, 0); 
}); 

在我HomeController,我有標記爲我的Index()方法的「授權」屬性,如下所示:

[Authorize] 
public IActionResult Index() 
{ 
    return View(); 
} 

如果我刪除授權屬性,一切工作正常(但安全被繞過)。如果我離開它,瀏覽器會變成空白。

正如我前面所述,在RC1之前一切正常。如果任何人都可以幫助我,這將不勝感激。

回答

2

看起來他們改變了8 Beta版和RC之間的一些選項1.嘗試將其更改爲下面的東西我用:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
{ 
    // ... 

    app.UseCookieAuthentication(options => 
     { 
      options.AutomaticAuthenticate = true; 
      options.AutomaticChallenge = true; 

      options.ExpireTimeSpan = TimeSpan.FromMinutes(60); 
      options.SlidingExpiration = true; 

      options.LoginPath = new PathString("/Account/Login"); 
      options.LogoutPath = new PathString("/Account/Logout"); 
      options.AccessDeniedPath = new PathString("/Account/AccessDenied"); 

      options.AuthenticationScheme = CookieAuthenticationDefaults.AuthenticationScheme; 
      options.CookieSecure = CookieSecureOption.SameAsRequest; 
      options.CookieHttpOnly = true; 
     }); 

    // ... 
} 

你有幾個不同的設置(如無滑動過期),但是這應該提供良好的工作開始。

魔術似乎是在這些線路:

options.AutomaticAuthenticate = true; 
options.AutomaticChallenge = true; 

他們強迫ASP.net 5來處理重定向到登錄頁面,並獲得授權屬性的工作。

其他升級的版本可能會發現此鏈接有用: http://wildermuth.com/2015/11/18/Upgrading_ASP_NET_5_Beta_8_to_RC1

主要的一點是,app.UpseCookieAuthentication移動在Startup.cs配置

+0

我有完全一樣的問題,升級到新版本後,後的ASP.NET。沒有options.AutomaticChallenge = true;應用程序完全忽略LoginPath選項並返回401代碼而不是302.您的解決方案完美無缺。 –