【发布时间】:2019-01-22 13:38:20
【问题描述】:
我正在尝试在 IIS 中的单个网站下设置的三个 Web 应用程序之间共享身份验证 cookie。前两个都是 .NET Core 2.1 应用程序,我什至努力让他们分享它。我的问题和
一样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;
});
如果这两个应用解决方案在我的本地机器上的localhost下运行(IISEXPRESS)
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 网站中应用程序的整个概念(它们有什么意义?)所以我开始怀疑我设置 IIS 的方式是否是问题所在。
我创建一个空网站,然后为我的每个应用程序“添加应用程序”
目前我只是想让它在开发服务器(devserver1)上工作,所以我没有设置主机名,我只是通过机器名来引用网络服务器
这在 FormsAuthentication 共享机器密钥下一切正常,我真的开始后悔我开始看 .NET Core
任何帮助将不胜感激
【问题讨论】:
-
您可以创建一个域帐户并在您服务器上的 IIS 中的该域帐户下运行您的两个应用程序。
-
使用本地 IIS,然后将 localhost IP (127.0.0.1) 用于 cookie 域,而不是“localhost”
-
@Kyle 1 当我设置 options.Cookie.Domain = "127.0.0.1";它甚至不让我登录(不写cookie?)所以我认为这是无效的
-
有效,我有很多应用程序都是这样运行的。如果您使用 SSL,请确保您至少为本地 IIS 设置了一个自签名证书。我在使用 localhost 运行我的所有应用程序时遇到了问题,因为它们包括自定义 SSO 提供程序之类的东西。
标签: c# iis cookies asp.net-core asp.net-identity