c# - 没有注册名为 'Default'的IUserTwoFactorTokenProvider。问题是两(2)个ASP.NET Core Identity注册中的AddDefaultTokenProviders()

标签 c# asp.net-core asp.net-web-api asp.net-identity

我有(2)Identity systems,每个都有自己的Context:

1: CustomerContext : IdentityDbContext<CustomerUser>
2: ApplicationContext : IdentityDbContext<ApplicationUser>

我已经在ASP.NET Core 3.0 API启动文件中成功注册了它们。一个使用'AddIdentity',另一个使用'AddIdentityCore'

我还为他们两个都添加了'AddDefaultTokenProviders'。尽管它可以生成并运行,但是当我尝试使用 token 提供程序时会出现问题,例如 GenerateEmailConfirmationTokenAsync GeneratePasswordResetTokenAsync

如果我从注册中删除了“AddDefaultTokenProviders”之一,则使用 token 对具有“AddDefaultTokenProviders”的身份起作用,当两者都包含AddDefaultTokenProviders时,均不起作用。我得到了这些异常(为简洁起见,我对其进行了一些修整):
System.NotSupportedException: No IUserTwoFactorTokenProvider named 'Default' is registered.
- at Microsoft.AspNetCore.Identity.UserManager.GenerateUserTokenAsync(GenerateEmailConfirmationTokenAsync)
OR
- at Microsoft.AspNetCore.Identity.UserManager.GenerateUserTokenAsync(GeneratePasswordResetTokenAsync)

这些是Startup.cs中的身份注册:

客户用户
services.AddIdentity<CustomerUser, CustomerRole>(options =>
{
    options.Password.RequiredLength = 6;
})
.AddEntityFrameworkStores<CustomerContext>()
.AddDefaultTokenProviders(); // <-- CANNOT HAVE (2)

应用程序用户
var builder = services.AddIdentityCore<ApplicationUser>(options =>
{
    options.Password.RequiredLength = 6;
});
builder = new IdentityBuilder(builder.UserType, typeof(ApplicationRole), builder.Services);
builder.AddEntityFrameworkStores<ApplicationContext>();
builder.AddDefaultTokenProviders(); // <-- CANNOT HAVE (2)

我碰到一篇文章,提到IdentityOptions是单例的,不能两次调用AddDefaultTokenProviders。但是没有解决方法。

如何为两个身份都包括默认 token 提供者?我需要创建自定义 token 提供程序吗?如果是这样,怎么办?我不需要任何 token 定制,我只需要默认的 token 行为。

谢谢你。

最佳答案

我通过添加第二个身份服务来解决此问题,如下所示:

services.AddIdentityCore<CustomerUser>(options => options.SignIn.RequireConfirmedAccount = true)
                .AddEntityFrameworkStores<TenantDataContext>()
                .AddTokenProvider<DataProtectorTokenProvider<CustomerUser>>(TokenOptions.DefaultProvider);
区别在于按指示的方式调用.AddTokenProvider而不是.AddDefaultTokenProviders()

关于c# - 没有注册名为 'Default'的IUserTwoFactorTokenProvider。问题是两(2)个ASP.NET Core Identity注册中的AddDefaultTokenProviders(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59303760/

相关文章:

c# - 当用户计算机上运行带有MySQL数据库的软件时,我们需要什么?

c# - 输入框位置

asp.net-web-api - 从 Web API ASP Net Core 返回 Excel 文件

asp.net-web-api - 无法在 ASP.NET Core 1.0 中启用跨源请求 (CORS)

javascript - 如何从 Angular JS 中的 HttpResponse 中提取 JSON 数据?

c# - 非静态方法需要 webapi 中的目标

c# - 在 .NET Core 3.0 中加载 exe 时出现错误的 IL 格式

c# - gmail联系人的邮政地址解析

asp.net - 实体类型 'Customer' 无法映射到表,因为它是从 'ApplicationUser' 派生的

asp.net - 如何使用 OWIN OAuthBearerAuthentication 验证访问 token ?