- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个 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 。
您有几个选择:
然后,您将使用类似于以下的代码注册它:
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/
我知道 userManager.GeneratePasswordResetToken() 中的 token 用于在超链接中添加作为安全标识符,以便在密码重置请求时发送给用户。 但我不确定 userMa
我是一名优秀的程序员,十分优秀!