Identityserver4 IUserClaimsPrincipalFactory`1未在IdentityServer实现中注册错误

Identityserver4 IUserClaimsPrincipalFactory`1未在IdentityServer实现中注册错误,identityserver4,asp.net-core-identity,Identityserver4,Asp.net Core Identity,即使注册了AddDefaultIdentity,我也会遇到以下异常 System.InvalidOperationException: Service type: IUserClaimsPrincipalFactory`1 not registered. 这是身份注册码: services.AddDefaultIdentity<ApplicationUser>(options => { //Disable account

即使注册了AddDefaultIdentity,我也会遇到以下异常

System.InvalidOperationException: Service type: IUserClaimsPrincipalFactory`1 not registered.
这是身份注册码:

services.AddDefaultIdentity<ApplicationUser>(options =>
            {
                //Disable account confirmation.
                options.SignIn.RequireConfirmedAccount = false;
                options.SignIn.RequireConfirmedEmail = false;
                options.SignIn.RequireConfirmedPhoneNumber = false;
            })
            .AddEntityFrameworkStores<ApplicationDbContext>();
services.AddDefaultIdentity(选项=>
{
//禁用帐户确认。
options.SignIn.RequireConfirmedAccount=false;
options.SignIn.RequireConfirmedEmail=false;
options.SignIn.RequireConfirmedPhoneNumber=false;
})
.AddEntityFrameworkStores();
下面是IdentityServer代码:

        var builder = services.AddIdentityServer()
            .AddInMemoryApiScopes(IdentityServerConfig.ApiScopes)
            .AddInMemoryIdentityResources(IdentityServerConfig.IdentityResources)
            .AddInMemoryApiResources(IdentityServerConfig.ApiResources)
            .AddInMemoryClients(IdentityServerConfig.Clients)
            .AddAspNetIdentity<IdentityUser>();
var builder=services.AddIdentityServer()
.AddInMemoryApiScopes(IdentityServerConfig.ApiScopes)
.AddInMemoryIdentityResources(IdentityServerConfig.IdentityResources)
.AddInMemoryApiResources(IdentityServerConfig.ApiResources)
.AddInMemoryClients(IdentityServerConfig.Clients)
.addAsNetIdentity();

我花了几个小时来解决这个打字错误

问题是我的注册错了

我使用的是
ApplicationUser
,但我正在identity server中注册
IdentityUser

我通过在
AddIdentityServer()
AddDefaultIdentity()
中设置
ApplicationUser
解决了我的问题

以下是工作代码:.Net核心标识

services.AddDefaultIdentity<ApplicationUser>(options =>
            {
                //Disable account confirmation.
                options.SignIn.RequireConfirmedAccount = false;
                options.SignIn.RequireConfirmedEmail = false;
                options.SignIn.RequireConfirmedPhoneNumber = false;
            })
            .AddEntityFrameworkStores<ApplicationDbContext>();
services.AddDefaultIdentity(选项=>
{
//禁用帐户确认。
options.SignIn.RequireConfirmedAccount=false;
options.SignIn.RequireConfirmedEmail=false;
options.SignIn.RequireConfirmedPhoneNumber=false;
})
.AddEntityFrameworkStores();
IdentityServer 4:

var builder = services.AddIdentityServer()
                .AddInMemoryApiScopes(IdentityServerConfig.ApiScopes)
                .AddInMemoryIdentityResources(IdentityServerConfig.IdentityResources)
                .AddInMemoryApiResources(IdentityServerConfig.ApiResources)
                .AddInMemoryClients(IdentityServerConfig.Clients)
                .AddAspNetIdentity<ApplicationUser>();
var builder=services.AddIdentityServer()
.AddInMemoryApiScopes(IdentityServerConfig.ApiScopes)
.AddInMemoryIdentityResources(IdentityServerConfig.IdentityResources)
.AddInMemoryApiResources(IdentityServerConfig.ApiResources)
.AddInMemoryClients(IdentityServerConfig.Clients)
.addAsNetIdentity();
请注意
ApplicationUser
的使用。
我把这个问题贴在这里,以便下次记住。

我通过更改顺序修复了这个错误。我有

var builder = services.AddIdentityServer()
    .AddInMemoryIdentityResources(Config.IdentityResources)
    .AddInMemoryClients(Config.Clients)
    .AddAspNetIdentity<ApplicationUser>();

builder.AddDeveloperSigningCredential();

services.AddDbContext<ApplicationDbContext>(options =>
    options.UseMySql(Configuration.GetConnectionString("ApplicationDbContext")));

services.AddIdentity<ApplicationUser, IdentityRole>()
    .AddEntityFrameworkStores<ApplicationDbContext>()
    .AddDefaultTokenProviders();
var builder=services.AddIdentityServer()
.AddInMemoryIdentityResources(Config.IdentityResources)
.AddInMemoryClients(Config.Clients)
.addAsNetIdentity();
AddDeveloperSigningCredential();
services.AddDbContext(选项=>
options.UseMySql(Configuration.GetConnectionString(“ApplicationDbContext”));
服务.额外性()
.AddEntityFrameworkStores()
.AddDefaultTokenProviders();
现在我有:

services.AddDbContext<ApplicationDbContext>(options =>
    options.UseMySql(Configuration.GetConnectionString("ApplicationDbContext")));

services.AddIdentity<ApplicationUser, IdentityRole>()
    .AddEntityFrameworkStores<ApplicationDbContext>()
    .AddDefaultTokenProviders();

var builder = services.AddIdentityServer()
    .AddInMemoryIdentityResources(Config.IdentityResources)
    .AddInMemoryClients(Config.Clients)
    .AddAspNetIdentity<ApplicationUser>();

builder.AddDeveloperSigningCredential();
services.AddDbContext(选项=>
options.UseMySql(Configuration.GetConnectionString(“ApplicationDbContext”));
服务.额外性()
.AddEntityFrameworkStores()
.AddDefaultTokenProviders();
var builder=services.AddIdentityServer()
.AddInMemoryIdentityResources(Config.IdentityResources)
.AddInMemoryClients(Config.Clients)
.addAsNetIdentity();
AddDeveloperSigningCredential();