我们有两个运行共享Cookie身份验证的.NET应用程序。一个是ASP.NET Core RC1应用程序,另一个是经典的.NET 4.5.1应用程序。
当前使用Microsoft.Owin.Security.Cookies.Interop
以下Configuration
方法中的过时设置Startup.cs
:
这可以正常工作,但不支持RC2。
我们如何进行RC2的共享cookie身份验证?
结合https://github.com/GrabYourPitchforks/aspnet5-samples/tree/dev/CookieSharing和在Asp.Net Core 1(MVC6)和MVC 5应用程序之间共享身份验证cookie,我能够提出一个可行的解决方案。我不知道这是否是解决问题的“正确”方法,但是它可以正常工作,所以在这里:
Microsoft.Owin.Security.Interop 1.0.0-rc2-final
在两个应用程序中都使用nuget-package 。
创建一个TicketDataFormat
使用方法DataProtectionProvider
,为磁盘上的加密密钥指定相同的位置,并具有相同的用途。
在这两个应用程序中以单点方式配置cookie身份验证。指定相同的内容CookieName
和TicketDataFormat
:
.NET 4.5.1,在以下方法的Configure方法中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 CORE RC2中的Configure方法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
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句