在两个不同的 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
才能正常工作
我有两个应用程序,一个是用 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
才能正常工作