【问题标题】:Sharing cookies between 2 .NET Core Applications DataProtectionProvider在 2 个 .NET Core 应用程序 DataProtectionProvider 之间共享 cookie
【发布时间】: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


【解决方案1】:

尝试如下设置 cookie 路径值。默认情况下,它将仅限于 App1 或 App2(我的经验)。

options.Cookie.Path = "/";

检查Controlling Cookie Scope

【讨论】:

    【解决方案2】:

    我明白了,为此我做了以下事情:

    我创建了一个网站,并添加了 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.
        });
    

    设置域不是必须的,据我了解,默认会采用域

    【讨论】:

      猜你喜欢
      • 2018-08-25
      • 2018-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多