我正在尝试在IIS中单个网站下设置的三个Web应用程序之间共享身份验证cookie。前两个都是.NET Core 2.1应用程序,而Im甚至很难让他们共享它。我的问题与
相同Sharing Cookies Between Two ASP.NET Core Applications
但是我无法使其在我的环境中工作。 我已阅读“在具有ASP.NET和ASP.NET Core的应用程序之间共享cookie”。并下载了“ Cookie共享应用程序示例”并使其正常运行(因为第三个应用程序是ASP.NET),现在我在StartUp.cs中的代码在两个.NET Core应用程序中都看起来像这样
services.AddDataProtection()
.PersistKeysToFileSystem(new
DirectoryInfo(persistKeysToFileSystemDirectory))
.SetApplicationName(applicationName);
services.ConfigureApplicationCookie(options => {
options.Cookie.Name = cookieName;
options.Cookie.SameSite = SameSiteMode.Lax;
options.Cookie.SecurePolicy = CookieSecurePolicy.SameAsRequest;
});
如果这两个应用程序解决方案在我的本地计算机(IISEXPRESS)上的localhost下运行
http:\ localhost:8174 \
http:\ localhost:8175 \
它们工作正常,但是当我部署到服务器(IIS)时,URL变为
http:\ devserver1:8000 \ App1
http:\ devserver1:8000 \ App2
并且他们不共享身份验证
如果我将本地解决方案更改为以
的身份运行http:\ localhost:8174 \ App1
http:\ localhost:8175 \ App2
他们不共享身份验证
我不认为我必须设置cookie域属性,因为它们都在同一站点下,但是我已经在本地进行了实验
options.Cookie.Domain = "localhost";
并在服务器上
options.Cookie.Domain = "devserver1";
没有任何效果,有时甚至不能让我登录(域无效?)
任何帮助将不胜感激
我越来越着急,已经进步了,还有很多补充。
如果我将应用程序设置为在devserver1上具有不同端口的单独网站
http:\ devserver1:8174 \
http:\ devserver1:8175 \
它可以工作并且它们共享身份验证(同样,我也不必设置options.Cookie.Domain值)-但是我将无法再使用相对URL来相互引用,因此App1将不会能够转到\ App2-我将必须使用完整的网址-但至少可以使用
这不是世界末日,但这似乎破坏了IIS网站中应用程序的整个概念(它们的意义是什么?),因此Im开始怀疑Im设置IIS的方式是否是问题所在。
我创建一个空网站,然后为我的每个应用“添加应用”
当前,我只是想在开发服务器(devserver1)上使它正常工作,因此我没有设置主机名,因此我只是通过机器名来引用网络服务器
在共享机器密钥的FormsAuthentication下,这一切都很好,我真的开始后悔我开始看.NET Core
任何帮助将不胜感激
答案 0 :(得分:0)
尝试如下设置cookie路径值。默认情况下,它将仅限于App1或App2(根据我的经验)。
options.Cookie.Path = "/";
答案 1 :(得分:0)
我明白了,为此我做了以下事情:
我创建了一个网站,并添加了 2 个应用程序,就像您一样:
http:\devserver1:8000\App1, http:\devserver1:8000\App2
然后在 StartUp 下面使用:
services.AddDataProtection()
.PersistKeysToFileSystem(new
DirectoryInfo(persistKeysToFileSystemDirectory))
.SetApplicationName(applicationName);
services.ConfigureApplicationCookie(options => {
options.Cookie.Name = cookieName;
options.Cookie.Path = "/";// it's necessary, because by default cookie Path for App1 will be /App1, and for App2 /App2.
});
没有必要设置域,据我所知,默认会使用域