Ohm*_*ioX 3 c# azure asp.net-identity .net-core azure-service-fabric
我有一个 Service Fabric 项目,其中有一个无状态的 WebAPI 项目。创建新用户时,我们会生成一个令牌。我使用了 Identity 框架的 UserManager.GenerateUserToken 如下:
var inviteUserToken = await userManager.GenerateUserTokenAsync(user, "PasswordTokenProvider", "Password");
Run Code Online (Sandbox Code Playgroud)
我们通过邮件发送这个令牌,它会被重新发送到服务器进行验证。验证方法如下:
var verifyToken = await userManager.VerifyUserTokenAsync(user, "PasswordTokenProvider", "Password", inviteUserToken);
Run Code Online (Sandbox Code Playgroud)
现在我有两种环境:一种具有 1 节点集群,另一种具有 3 节点集群。一切都在 1 节点集群中完美运行。但是在 3 节点集群中,verify token 的行为是非常随机的。它有时有效,有时无法验证。
注意:两种环境完全相同,只是节点数量不同。
您面临的问题是因为用于生成令牌的加密密钥在每个节点(机器)上都不同。即:当您在 node1 上生成令牌时,它使用密钥 123,但当您在 node2 上解码时,它使用密钥 345。集群中的每个节点都必须使用相同的密钥才能正常工作。
过去,这些由 machine.config 自动生成的密钥定义,在 dotnet 核心上,它基于数据保护自动生成的密钥。
您有几个选择:
然后,您将使用类似于此的代码注册它:
public void ConfigureServices(IServiceCollection services)
{
services.AddDataProtection()
.PersistKeysToFileSystem(new DirectoryInfo(@"\\server\share\directory\"))
}
Run Code Online (Sandbox Code Playgroud)
确保保护对这些密钥的访问以避免意外访问。您还可能决定对这些密钥进行加密,以避免在它们遭到破坏时被使用。
您可能还需要配置TokenOptions以使用新的数据保护提供程序,请查看此链接以了解更多详细信息。
| 归档时间: |
|
| 查看次数: |
477 次 |
| 最近记录: |