【发布时间】:2021-03-20 23:20:04
【问题描述】:
我通过登录 .net 4x 应用程序设置身份验证 cookie,然后尝试访问由 .net 5 核心应用程序上的 [Authorize] 属性保护的页面类。这失败了,我被引导回登录页面。如果我删除 [Authorize] 属性并访问和解密共享身份验证 cookie,我可以在 AuthenticationTicket 中看到由 .net 4x 应用程序创建的用户和声明(请参见下面的代码) - 但是当尝试访问 ClaimsPrincipal 用户时这页纸。此用户没有 cookie 的任何详细信息。 var user = _userManager.GetUserAsync(User).Result; 始终为空。
var dataProtectionProvider = DataProtectionProvider.Create(new DirectoryInfo(@"c:\temp\keyring"));
var cookieManager = new ChunkingCookieManager();
var cookie = cookieManager.GetRequestCookie(HttpContext, ".AspNetCore.SharedCookie");
var dataProtector = dataProtectionProvider.CreateProtector
("Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware", "Identity.Application", "v2");
//Get teh decrypted cookies as a Authentication Ticket
TicketDataFormat ticketDataFormat = new TicketDataFormat(dataProtector);
AuthenticationTicket ticket = ticketDataFormat.Unprotect(cookie);
var user = _userManager.GetUserAsync(User).Result;
下面是.net 5应用中startup.cs文件中的configureservices代码
....
services.AddDbContext<RosterDBContext>(options =>
{
options.UseSqlServer(Configuration.GetConnectionString("databaseconnection")
, sqlServerOptions => sqlServerOptions.CommandTimeout(120)
);
options.EnableSensitiveDataLogging();
});
services.AddIdentity<RosterUser, RosterRole>()
.AddEntityFrameworkStores<RosterDBContext>();
services.Configure<SecurityStampValidatorOptions>
(
options => {
options.ValidationInterval = TimeSpan.FromSeconds(10);
}
);
services.AddDataProtection()
.PersistKeysToFileSystem(new DirectoryInfo(@"c:\temp\keyring"));
services.AddAuthentication("Identity.Application")
.AddCookie(config =>
{
config.Cookie.Name = ".AspNetCore.SharedCookie";
config.Cookie.Path = "/";
});
services.ConfigureApplicationCookie(options =>
{
options.LoginPath = "/Identity/Account/Login/";
});
services.AddHttpContextAccessor();
services.AddRazorPages();
【问题讨论】:
标签: c# .net asp.net-core authentication cookies