从Beta 8迁移到RC1后的ASP.NET 5(VNEXT)Cookie身份验证问题
本文关键字:VNEXT Cookie 问题 身份验证 NET ASP Beta 迁移 后的 RC1 | 更新日期: 2023-09-27 18:24:02
我已经在ASP.NET 5(VNext)中创建了一个应用程序好几个月了,并且随着ASP.NET 5的新版本的发布,我一直在稳步升级应用程序。在将RC1应用于我的Beta 8应用程序后,我的Cookie验证停止工作。当页面需要身份验证/授权时,web浏览器只显示一个空白屏幕。
在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"属性,如下所示:
[Authorize]
public IActionResult Index()
{
return View();
}
如果我删除Authorize属性,一切都可以正常工作(但绕过了安全性)。如果我离开它,浏览器将变为空白。
正如我之前所说的,在RC1之前一切都很好。如果有人能帮我,我将不胜感激。
看起来他们在Beta 8和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处理重定向到登录页面的操作,并使Authorize属性生效。
其他升级程序可能会发现此链接很有用:http://wildermuth.com/2015/11/18/Upgrading_ASP_NET_5_Beta_8_to_RC1
重点是这个应用程序。UpseCookieAuthentication已移至Startup.cs 中的Configure