我正在使用ASP.NET Core Identity和IdentityServer4创建身份验证服务。总体上一切正常,但由于存在一个问题,因为它在我们的实时环境中托管在多个服务器上,在这种情况下,在一台服务器上生成的 token (例如密码重置 token )无效另外一个。

我正在这样设置身份(自定义用户商店等在其他地方注册的):

 services.AddDataProtection()
     .SetApplicationName("IdentityService");

 services.AddIdentity<ApplicationUser, ApplicationRole>(options =>
 {
     options.Password.RequireNonAlphanumeric = false;
 })
     .AddDefaultTokenProviders();

如您所见,我尝试设置应用程序名称,因此每个服务器上的名称都相同,但是这并没有解决问题。

我发现I can create an IXmlRepository将用于存储Identity使用的 key :
services.AddDataProtection()
     .SetApplicationName("IdentityService");
     .AddKeyManagementOptions(s => s.XmlRepository = new CustomXmlRepo());

如果我实现了这一点并将 key 存储在我们的数据库中,是否可以解决我的问题?还有其他(更好)的方法吗?

最佳答案

本文介绍了准备好identityserver4实现生产所需要做的工作-其中包括共享和持久存储数据保护 key 的要求:

IdentityServer4指南:http://docs.identityserver.io/en/latest/topics/deployment.html

配置ASP.NET Core数据保护:https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/configuration/overview?view=aspnetcore-3.1

实现自己的方法绝对没问题-只要确保确保将它们存储在任何地方都受到足够的保护。

关于c# - ASP.NET Core身份-使 token (电子邮件确认,密码重置等)在不同服务器之间有效吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59394909/

10-17 02:17