我有很多应用程序托管在主域和子域上:
www.example.com上的网站A,ASP.NET(.Net Core 2.0)
网站B,site.example.com上的ASP.NET Webform(4.7 .net Framework)
account.example.com上的网站C,ASP.NET 身份(。Net Core 2.0)
网站D,file.example.com上的ASP.NET Webform(4.7 .net Framework)
我想在 account.example.com 上登录使用,经过身份验证的用户将重定向到其他网站。他们将通过其他网站上的角色进行授权。
我正在尝试在这些网站之间共享Cookie,并且所有网站都托管在 Azure Web App 上。
我正在使用 ASP.NET身份(.Net Core 2.0)。我正在使用内置的cookie身份验证。
如何在所有应用程序中使用Data Protection并在其中共享cookie。
对于数据保护,我的代码是:
services.AddDataProtection()
.SetApplicationName("example")
.PersistKeysToFileSystem(new DirectoryInfo(@"%HOME%\ASP.NET\DataProtection-Keys"))
.SetDefaultKeyLifetime(TimeSpan.FromDays(14));
对于Cookie身份验证,我的代码是:
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
CookieDomain = ".example.com"
});
答案 0 :(得分:0)
关于.Net Core,如果你想在几个站点之间共享你的cookie,你可以尝试以下来初始化它而不是UseCookieAuthentication:
Age Income
39 <=50K
50 <=50K
38 <=50K
53 <=50K
28 <=50K
37 <=50K
49 <=50K
52 >50K
31 >50K
42 >50K
37 >50K
30 >50K
23 <=50K
32 <=50K
40 >50K
34 <=50K
25 <=50K
32 <=50K
当然,您需要为所有站点提供相同的ProtectionProvider路径。
答案 1 :(得分:0)
我从此Microsoft文档中获得了解决方案
Share cookies among apps with ASP.NET and ASP.NET Core
此子域身份验证系统的示例代码
Cookie Sharing Sample App - GitHub
该示例说明了使用Cookie身份验证的三个应用之间的Cookie共享:
将此代码放在Startup.cs的ConfigureServices方法中
services.AddDataProtection()
.PersistKeysToFileSystem(GetKeyRingDirInfo())
.SetApplicationName("example");
services.ConfigureApplicationCookie(options =>
{
options.Cookie.Name = "example";
options.Cookie.Domain = ".example.com";
});
对于KeyRing方法
private DirectoryInfo GetKeyRingDirInfo()
{
var startupAssembly = System.Reflection.Assembly.GetExecutingAssembly();
var applicationBasePath = System.AppContext.BaseDirectory;
var directoryInfo = new DirectoryInfo(applicationBasePath);
do
{
directoryInfo = directoryInfo.Parent;
var keyRingDirectoryInfo = new DirectoryInfo(Path.Combine(directoryInfo.FullName, "KeyRing"));
if (keyRingDirectoryInfo.Exists)
{
return keyRingDirectoryInfo;
}
}
while (directoryInfo.Parent != null);
throw new Exception($"KeyRing folder could not be located using the application root {applicationBasePath}.");
}
注意:您必须复制在Identity应用程序托管服务器上自动生成的KeyRing文件,然后手动粘贴到其他网站的其他子域和主域托管服务器上,以共享Cookie进行身份验证。 < / p>