UserManager:不同网络应用程序中的 GenerateEmailConfirmationTokenAsync() 和 ConfirmEmailAsync()
UserManager: GenerateEmailConfirmationTokenAsync() and ConfirmEmailAsync() in different web applications
我有 2 个 ASP MVC 核心 Web 应用程序(引用 Microsoft.AspNetCore.App, Version 2.1.1
)。 运行 在我机器上 Visual Studio 本地。
- 如果我在第一个网络应用程序中调用
var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);
- 然后在第 2 个 Web 应用程序上
var result = await _userManager.ConfirmEmailAsync(user, code);
我得到了结果"Invalid token."
。
我读过 ASP.NET Core 2.0 - ASP.NET Identity - Invalid Token Error 但我的问题不同。它在本地也不起作用!
(我想设置 machineKey
不会有帮助,因为这两个应用程序在我的本地计算机上都是 运行。即使我本地没有 web.config
。)
令牌已保存到数据库中,因此您只需能够在另一端正确解密即可。为此,如果您的两个应用程序都是 ASP.NET Core,那么您只需为两个应用程序设置数据保护提供程序以连接到相同的外部商店并使用相同的应用程序名称。外部存储可以是网络位置、映射驱动器、Azure Key Vault 等。您应该查看 full documentation,但本质上:
services.AddDataProtection()
.SetApplicationName("shared app name")
.PersistKeysToFileSystem(new DirectoryInfo(@"\server\share\directory\"));
您可能需要也可能不需要指定一个应用作为主密钥环管理器。默认情况下,每个应用程序都会自动轮换密钥,如果您有多个应用程序共享相同的密钥,这可能会成为一个问题。您可以通过以下方式禁用每个应用程序的密钥轮换:
services.AddDataProtection()
.DisableAutomaticKeyGeneration();
基本上,您会将此添加到所有从属应用程序,只留下您指定为主应用程序的应用程序来轮换密钥。
我有 2 个 ASP MVC 核心 Web 应用程序(引用 Microsoft.AspNetCore.App, Version 2.1.1
)。 运行 在我机器上 Visual Studio 本地。
- 如果我在第一个网络应用程序中调用
var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);
- 然后在第 2 个 Web 应用程序上
var result = await _userManager.ConfirmEmailAsync(user, code);
我得到了结果"Invalid token."
。
我读过 ASP.NET Core 2.0 - ASP.NET Identity - Invalid Token Error 但我的问题不同。它在本地也不起作用!
(我想设置 machineKey
不会有帮助,因为这两个应用程序在我的本地计算机上都是 运行。即使我本地没有 web.config
。)
令牌已保存到数据库中,因此您只需能够在另一端正确解密即可。为此,如果您的两个应用程序都是 ASP.NET Core,那么您只需为两个应用程序设置数据保护提供程序以连接到相同的外部商店并使用相同的应用程序名称。外部存储可以是网络位置、映射驱动器、Azure Key Vault 等。您应该查看 full documentation,但本质上:
services.AddDataProtection()
.SetApplicationName("shared app name")
.PersistKeysToFileSystem(new DirectoryInfo(@"\server\share\directory\"));
您可能需要也可能不需要指定一个应用作为主密钥环管理器。默认情况下,每个应用程序都会自动轮换密钥,如果您有多个应用程序共享相同的密钥,这可能会成为一个问题。您可以通过以下方式禁用每个应用程序的密钥轮换:
services.AddDataProtection()
.DisableAutomaticKeyGeneration();
基本上,您会将此添加到所有从属应用程序,只留下您指定为主应用程序的应用程序来轮换密钥。