在两个不同的 ASP.NET 核心网络应用程序之间共享身份验证 cookie

Share authentication cookies between two different ASP.NET Core web applications

我有两个应用程序,一个是用 ASP.NET Core 2.1 编写的,一个是 ASP.NET Core 5 (.NET 5)。并且这两个应用程序都使用 identityserver4 进行身份验证并使用 ASP.NET 核心数据保护 API 来加密身份验证 cookie。

我正在尝试在两个应用程序之间共享相同的 cookie。意思是一台服务器发出的cookie可以被另一台服务器读取,反之亦然。

我正在使用以下代码来确保这两个应用共享相同的密钥

services.AddDataProtection()
   .PersistKeysToFileSystem(AppConfiguration.PersistKeysDirectory);

这两个应用程序将部署到同一台机器上,指向同一目录。但它不起作用。我仍然收到 ticket unprotect failed 错误。

我错过了什么?

其实不然。密钥可以在版本之间共享,前提是两个应用程序共享相同的应用程序名称和相同的目录,如下所示

services.AddDataProtection()
   .SetApplicationName({config.SharedAppName})
   .PersistKeysToFileSystem(config.PersistKeysDirectory);

github issue and also

原因是两个应用不一样,不是同一个应用的两个副本,而是两个不同的应用。我估计如果 ApplicationName 没有设置,ASP.NET Core 将使用某种文件校验和来确定 ApplicationName。所以两个不同的应用程序必须设置相同的 ApplicationName 才能正常工作