我们有两个.NET应用程序运行共享cookie身份验证。一个是ASP.NET核心RC1应用程序,另一个是典型的.NET 4.5.1应用程序。
这是当前使用Configuration
方法Startup.cs
中过时的Startup.cs
设置的。
这很好,但不支持RC2方法。
我们如何处理RC2的共享cookie身份验证?
发布于 2016-05-31 02:41:09
结合https://github.com/GrabYourPitchforks/aspnet5-samples/tree/dev/CookieSharing和Sharing authentication cookie among Asp.Net Core 1 (MVC6) and MVC 5 applications,我想出了一个可行的解决方案。我不知道这是否是“正确”的方法,但它有效,所以这里:
Microsoft.Owin.Security.Interop 1.0.0-rc2-final
。TicketDataFormat
,使用DataProtectionProvider
为加密密钥指定磁盘上相同的位置,以及相同的用途。CookieName
和TicketDataFormat
.NET 4.5.1,在Startup.cs
配置方法中
var authenticationType = "Cookies";
var cookieName = "myCookieName";
var cookieEncryptionKeyPath= "C:/mypath";
var dataProtectionProvider = DataProtectionProvider.Create(new DirectoryInfo(cookieEncryptionKeyPath));
var dataProtector = dataProtectionProvider.CreateProtector("Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware", authenticationType, "v2");
var ticketDataFormat = new AspNetTicketDataFormat(new DataProtectorShim(dataProtector));
app.SetDefaultSignInAsAuthenticationType(authenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = authenticationType,
CookieName = cookieName,
TicketDataFormat = ticketDataFormat
});
.NET核心RC2在Startup.cs
配置方法中的应用
var authenticationType = "Cookies";
var cookieName = "myCookieName";
var cookieEncryptionKeyPath= "C:/mypath";
var protectionProvider = DataProtectionProvider.Create(new DirectoryInfo(cookieEncryptionKeyPath));
var dataProtector = protectionProvider.CreateProtector("Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware", authenticationType, "v2");
var ticketFormat = new TicketDataFormat(dataProtector);
app.UseCookieAuthentication(
new CookieAuthenticationOptions
{
CookieName = options.CookieName,
CookieDomain = options.CookieDomain,
TicketDataFormat = ticketFormat
});
https://stackoverflow.com/questions/37529741
复制相似问题