我正在尝试跨子域共享我的ASP.NET Identity cookie。目前仅在本地。
- sub1.domain.local
- sub2域本地
我在两个站点上都有相同的机器密钥,但在sub1上创建的cookie不会在sub2上验证,反之亦然。生成的cookie域总是".domain.local"(哪个应该是正确的??)
这是我在启动类中的设置:
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/login"),
CookieDomain = ".domain.local",
});
我只为每个站点尝试了localhost:siteport,但结果相同(cookie域为空,解析为"localhost")
我一辈子都搞不清楚自己做错了什么。也许有人能给我指明正确的方向?感谢
更新
好吧,我已经发现cookie实际上是在子域之间共享的,但它只在创建cookie的子域上有效。需要找到一种方法来了解身份验证在其他站点失败的原因。。
经过大量的headcratching,我注意到各种Identity包的版本号存在差异。我更新了Nuget的各种软件包,你不知道吗。成功了!
让我担心的是,它只从次要版本更新(例如Microsoft.Owin.Security.Cookies从3.0.0.0更新到3.0.1.0)。我不希望它们将来必须保持一致。。
您需要将Cookie Path设置为./
全局根文件夹。这样,根目录下的所有站点都可以使用cookie。