如何解决“无法解析'Microsoft.AspNetCore.Identity.UserManager类型的服务”?

时间:2019-11-29 09:40:49

标签: c# asp.net-core identityserver4

MVC客户端:ASP.NET CORE 3身份(具有支架身份)。 身份服务器4(v3)。

quickstart创建。

MVC客户端启动具有:

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

AddIdentity帮助我注册新用户。

当我尝试使用Identity Server登录MVC客户端时,出现无限循环。我read,那需要删除AddIdentity,因为我的客户端正在连接到ID服务器。 当我删除AddIdentity时,登录效果很好。

但是我的MVC客户端已经为用户注册添加了身份标识。尝试打开用户注册表单(http://localhost:5002/Identity/Account/Register)时,出现错误:

InvalidOperationException: Unable to resolve service for type 'Microsoft.AspNetCore.Identity.UserManager`1[SharedIdentity.Models.ApplicationUser]' while attempting to activate 'UserRegistration.Areas.Identity.Pages.Account.RegisterModel'.

当我尝试不使用Identity UserManager注册时:

 services.AddScoped<UserManager<ApplicationUser>>();
 services.AddScoped<SignInManager<ApplicationUser>>();

我收到其他错误:

Unhandled exception. System.AggregateException: Some services are not able to be constructed 
(Error while validating the service descriptor 'ServiceType: 
Microsoft.AspNetCore.Identity.UserManager`1[SharedIdentity.Models.ApplicationUser] 
Lifetime: Scoped ImplementationType: Microsoft.AspNetCore.Identity.UserManager`1[SharedIdentity.Models.ApplicationUser]': 
Unable to resolve service for type 'Microsoft.AspNetCore.Identity.IUserStore`1[SharedIdentity.Models.ApplicationUser]' while attempting to activate 'Microsoft.AspNetCore.Identity.UserManager`1[SharedIdentity.Models.ApplicationUser]'.) 
(Error while validating the service descriptor 'ServiceType: Microsoft.AspNetCore.Identity.SignInManager`1[SharedIdentity.Models.ApplicationUser] Lifetime: Scoped ImplementationType: Microsoft.AspNetCore.Identity.SignInManager`1[SharedIdentity.Models.ApplicationUser]': Unable to resolve service for type 'Microsoft.AspNetCore.Identity.IUserStore`1[SharedIdentity.Models.ApplicationUser]' 
while attempting to activate 'Microsoft.AspNetCore.Identity.UserManager`1[SharedIdentity.Models.ApplicationUser]'.)
 ---> System.InvalidOperationException: Error while validating the service descriptor 'ServiceType: Microsoft.AspNetCore.Identity.UserManager`1[SharedIdentity.Models.ApplicationUser] Lifetime: Scoped ImplementationType: Microsoft.AspNetCore.Identity.UserManager`1[SharedIdentity.Models.ApplicationUser]': 

Unable to resolve service for type 'Microsoft.AspNetCore.Identity.IUserStore`1[SharedIdentity.Models.ApplicationUser]' while attempting to activate 'Microsoft.AspNetCore.Identity.UserManager`1[SharedIdentity.Models.ApplicationUser]'.
 ---> System.InvalidOperationException: Unable to resolve service for type 'Microsoft.AspNetCore.Identity.IUserStore`1[SharedIdentity.Models.ApplicationUser]' while attempting to activate 'Microsoft.AspNetCore.Identity.UserManager`1[SharedIdentity.Models.ApplicationUser]'.

......
System.InvalidOperationException: Unable to resolve service for type 'Microsoft.AspNetCore.Identity.IUserStore`1[SharedIdentity.Models.ApplicationUser]' while attempting to activate 'Microsoft.AspNetCore.Identity.UserManager`1[SharedIdentity.Models.ApplicationUser]'.
   at

也许我走错路了?我需要我的MVC客户端可以注册用户,并可以使用Identity Server登录用户。

1 个答案:

答案 0 :(得分:1)

这不能像“ 解决问题”中那样回答问题。但这确实解决了设置用户管理的问题,对于@hdoitc来说,这似乎是可以接受的答案:

首先,客户端不应该访问身份模型。这是IdentityServer的责任。相同的登录次数。用户不是登录客户端网站而是登录IdentityServer网站。对于注册,用户是在IdentityServer中注册的,而不是在客户端中注册的。

IdentityServer对用户进行身份验证并授权客户端。因此,您需要将用户发送到IdentityServer网站进行登录和注册。将用户视为未绑定到一个客户端的实体。凭借其帐户,它可以使用任何客户端,除非授权被拒绝,尽管IdentityServer是not recommended的用户授权:

  

PolicyServer是我们建议的用户授权。

如果您有兴趣,请here's链接。

默认情况下,Identity的UI并不多,因为IdentityServer实际上不是关于用户管理的。但是有一些support for asp.net Identity

您可以随时添加视图,因为这是asp.net身份。我建议您按照此处记录的方式创建一个新项目和scaffold the Identity个文件,并使用所需的任何内容,或者看看sources here。如果我没记错的话,那么RazorPages就有UI,但是Mvc没有。

您可以通过自定义视图来改善IdentityServer中的用户体验,例如添加徽标,通过由clientId标识客户端来使用主题。