gpt4 book ai didi

c# - 身份框架GenerateUserToken验证问题

转载 作者:太空宇宙 更新时间:2023-11-03 22:41:35 24 4
gpt4 key购买 nike

我有一个 Service Fabric 项目,其中有一个无状态 WebAPI 项目。当创建新用户时,我们会生成一个 token 。我使用了 Identity 框架的 UserManager.GenerateUserToken,如下所示:

var inviteUserToken = await userManager.GenerateUserTokenAsync(user, "PasswordTokenProvider", "Password");

我们通过邮件发送此 token ,并将其重新发送到服务器进行验证。验证方法如下:

  var verifyToken = await userManager.VerifyUserTokenAsync(user, "PasswordTokenProvider", "Password", inviteUserToken);

现在我有两个环境:一个具有 1 节点集群,另一个具有 3 节点集群。在 1 节点集群中一切都运行良好。但在 3 节点集群中,验证 token 行为非常随机。有时有效,有时验证失败。

注意:除了节点数量外,两个环境完全相同。

最佳答案

您面临的问题是因为用于生成 token 的加密 key 在每个节点(机器)上都不同。即:当您在节点 1 上生成 token 时,它使用 key 123,但当您在节点 2 上解码时,它使用 key 345。集群中的每个节点都必须使用相同的 key 才能正常工作。

过去,这些由 machine.config 自动生成的 key 定义,在 dotnet core 上它基于 data protection自动生成的 key 。

您有几个选择:

  • 将这些 key 存储在共享网络文件夹中
  • 将这些 key 存储在 Blob 存储中
  • 将它们复制到运行应用程序的每个节点上

然后,您将使用类似于以下的代码注册它:

public void ConfigureServices(IServiceCollection services)
{
services.AddDataProtection()
.PersistKeysToFileSystem(new DirectoryInfo(@"\\server\share\directory\"))
}

确保保护对这些 key 的访问,以避免意外访问。您还可以决定对这些 key 进行加密,以避免在它们被泄露时被使用。

您可能还需要配置TokenOptions要使用新的数据保护提供程序,请查看 this link了解更多详情。

关于c# - 身份框架GenerateUserToken验证问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51966010/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com