ASP.NET 身份 cookie 和子域
ASP.NET Identity cookie and subdomains
我正在尝试跨子域共享我的 ASP.NET 身份 cookie。目前仅在本地。
- sub1.domain.local
- sub2.domain.local
我在两个站点上都有相同的机器密钥,但是在 sub1 上创建的 cookie 在 sub2 上无法验证,反之亦然。生成的 cookie 域始终为“.domain.local”(应该是正确的??)
这是我在启动时的设置 class:
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/login"),
CookieDomain = ".domain.local",
});
我已经为每个站点尝试了 localhost:siteport,但结果相同(cookie 域空白,解析为 "localhost")
我这辈子都弄不明白我做错了什么。也许有人可以指出我正确的方向?谢谢
更新
好的,所以我发现 cookie 实际上是在子域之间共享的,但它只在创建 cookie 的子域上被认为有效。需要找到一种方法来了解为什么在其他站点上验证失败..
经过一番摸索之后,我注意到各种身份包的版本号不同。我从 Nuget 更新了各种包,你不知道吗?有效!
让我担心的是它只从次要版本更新(例如 Microsoft.Owin.Security.Cookies 从 3.0.0.0 到 3.0.1.0)。我不希望他们将来必须像那样保持一致..
您需要将 Cookie 路径设置为 ./
全局根文件夹。这样 cookie 将对根目录下的所有站点可用。
我正在尝试跨子域共享我的 ASP.NET 身份 cookie。目前仅在本地。
- sub1.domain.local
- sub2.domain.local
我在两个站点上都有相同的机器密钥,但是在 sub1 上创建的 cookie 在 sub2 上无法验证,反之亦然。生成的 cookie 域始终为“.domain.local”(应该是正确的??)
这是我在启动时的设置 class:
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/login"),
CookieDomain = ".domain.local",
});
我已经为每个站点尝试了 localhost:siteport,但结果相同(cookie 域空白,解析为 "localhost")
我这辈子都弄不明白我做错了什么。也许有人可以指出我正确的方向?谢谢
更新
好的,所以我发现 cookie 实际上是在子域之间共享的,但它只在创建 cookie 的子域上被认为有效。需要找到一种方法来了解为什么在其他站点上验证失败..
经过一番摸索之后,我注意到各种身份包的版本号不同。我从 Nuget 更新了各种包,你不知道吗?有效!
让我担心的是它只从次要版本更新(例如 Microsoft.Owin.Security.Cookies 从 3.0.0.0 到 3.0.1.0)。我不希望他们将来必须像那样保持一致..
您需要将 Cookie 路径设置为 ./
全局根文件夹。这样 cookie 将对根目录下的所有站点可用。