c# - 跨子域共享身份登录 Cookie
问题描述
我目前正在开发一个 ASP.Net Core 3 pre-release 9 MVC Web 应用程序。我尝试使用相同的 Cookie 登录我的 Web 应用程序。
目前我Startup.cs
的ConfigureServices
方法如下所示:
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 应用程序处理
解决方案
所以它在某些方面有点复杂,但解决方案实际上非常简单。
本地主机在很多方面都得到了特殊待遇,但对于 cookie 也是如此。为了让客户端(例如浏览器)接受 cookie,该Domain
属性需要包含至少两个点。对于本地主机,您可以通过构建您的域来简单地做到这一点,.domain.localhost
这将解决问题。当然,您现在需要通过同一个域调用您的网站才能正常工作。
推荐阅读
- nginx - 如何告诉 nginx 将 content_type 作为请求的文件扩展名提供服务?
- c# - 如何使用 ODataMessageReader 从 Odata 请求正文中读取大型二进制流
- javascript - 生成html转pdf(支持css样式)
- google-cloud-platform - AutoML 训练错误:少于 50% 的行 > 成功生成的示例
- ansible - Ansible aws_secrets 查找旁路问题 - 仅返回 10 个元素
- git - git commit - gpg 无法签署数据,但可以从控制台工作
- java - How to store JSON in model - SpringBoot
- kotlin - 如何在 Kotlin 中构建外部类期间创建内部类的实例
- javascript - 进入页面时如何执行循环
- woocommerce - Woocommerce - 扩展产品搜索表单