我在两个单独的ASP.NET Core项目中使用WsFederation。
每个项目在Startup.cs
services.AddAuthentication(sharedOptions =>
{
sharedOptions.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
sharedOptions.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
sharedOptions.DefaultChallengeScheme = WsFederationDefaults.AuthenticationScheme;
})
.AddWsFederation(options =>
{
options.Wtrealm = Configuration["Wtrealm"];
options.MetadataAddress = "http://example.com/metadata.xml";
options.SkipUnrecognizedRequests = true;
options.RequireHttpsMetadata = false;
options.UseTokenLifetime = false;
})
.AddCookie(options =>
{
options.Cookie.Name = "MySharedCookie";
options.Cookie.Path = "/";
options.Cookie.Domain = ".dev.example.com";
});
我在浏览器中加载了项目#1,然后我得到了我的cookie:
然后我导航到同一子域上的项目#2。但是,项目#2无法识别MySharedCookie
并重新进行身份验证。我得到一个名称相同但值不同的新cookie:
我正在尝试在ASP.NET Core中做什么?在ASP.NET Core中是否有办法我可以与项目#2共享项目#1的cookie?
答案 0 :(得分:3)
Sharing cookies among apps with ASP.NET and ASP.NET Core记录了这一点。还有一个Cookie Sharing App Sample可用。
为了共享Cookie,您需要在每个应用中创建DataProtectionProvider
并在应用之间使用通用/共享密钥集。
.AddCookie(options =>
{
options.Cookie.Name = ".SharedCookie";
options.Cookie.Domain = "example.com";
options.DataProtectionProvider =
DataProtectionProvider.Create(new DirectoryInfo("path-tokeys"));
});