c# - ASP.NET Core Identity - 使 token (电子邮件确认、密码重置等)在不同服务器上有效?

标签 c# asp.net-core asp.net-identity identityserver4 asp.net-core-identity

我正在使用 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://learn.microsoft.com/en-us/aspnet/core/security/data-protection/configuration/overview?view=aspnetcore-3.1

实现您自己的方法绝对没问题 - 只要确保它们存储的位置受到充分保护即可。

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

相关文章:

C#引用变量使用说明

c# - 如何使用 simple.odata.client 扩展分层数据

c# - 呈现 ViewComponent 返回 HTML 500 错误

asp.net-core - 如何到达openiddict授权服务器的注册页面?

c# - 如果用户使用 ASP .Net Identity 通过外部登录提供程序登录,如何保存用户上次登录日期?

c# - 从 IList<string> 或 IEnumerable<string> 创建逗号分隔列表

c# - Entity Framework 稍后在选择语句中使用已选择的值保存在新变量中

c# - .Net Core 2.0 Windows 服务

asp.net - 使用 asp.net Identity 的 WebAPI2 中的多个 token 生命周期

asp.net-mvc - 如何使用 ASP.NET Identity (OWIN) 访问 Facebook 私有(private)信息?