首页 > 解决方案 > 跨子域共享身份登录 Cookie

问题描述

我目前正在开发一个 ASP.Net Core 3 pre-release 9 MVC Web 应用程序。我尝试使用相同的 Cookie 登录我的 Web 应用程序。

目前我Startup.csConfigureServices方法如下所示:

services.ConfigureApplicationCookie(options =>
            {
                options.Cookie.Name = "Auth";
                options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
                options.Cookie.SameSite = Microsoft.AspNetCore.Http.SameSiteMode.Strict;
                options.Cookie.HttpOnly = false;

                options.ExpireTimeSpan = TimeSpan.FromDays(31);
                options.LoginPath = "/Auth/SignIn";
                options.SlidingExpiration = true;
                options.Validate();
            });

然后就像关于 SO 的其他问题所说,我在这些方面添加了一些内容:

options.Cookie.Domain = ".localhost";

我试过不带点、端口和所有可能的组合,但它不起作用。我也将其更改SameSiteMode为任何可能的选项,但它也没有帮助。我什至在浏览器 Cookie 中都看不到它,除非我将其删除,否则它将无法正常工作。

注意:所有子域都由同一个 ASP.Net Core 应用程序处理

标签: c#asp.net-corecookiesasp.net-identityasp.net-core-3.0

解决方案


所以它在某些方面有点复杂,但解决方案实际上非常简单。

本地主机在很多方面都得到了特殊待遇,但对于 cookie 也是如此。为了让客户端(例如浏览器)接受 cookie,该Domain属性需要包含至少两个点。对于本地主机,您可以通过构建您的域来简单地做到这一点,.domain.localhost这将解决问题。当然,您现在需要通过同一个域调用您的网站才能正常工作。


推荐阅读