Asp.net core Asp.Net核心Web应用程序,具有IdentityServer4和Identity

Asp.net core Asp.Net核心Web应用程序,具有IdentityServer4和Identity,asp.net-core,entity-framework-core,asp.net-identity,identityserver4,razor-pages,Asp.net Core,Entity Framework Core,Asp.net Identity,Identityserver4,Razor Pages,我有一个Asp.Net核心web应用程序,它使用Asp.Net标识进行用户管理。应用程序创建员工,并在创建员工时;我必须创建一个AspNetUser及其相应的角色。然后,该员工可以登录到应用程序,并根据其角色显示UI。所以我使用SignInManager、RoleManager和UserManager来完成所有这些。目前还没有涉及API。正在使用具有存储库模式的EF Core 现在,客户要求我将此web应用程序的lite版本开发为本机应用程序。为此,我显然需要API。涉及到很多业务规则,所以我的

我有一个Asp.Net核心web应用程序,它使用Asp.Net标识进行用户管理。应用程序创建员工,并在创建员工时;我必须创建一个AspNetUser及其相应的角色。然后,该员工可以登录到应用程序,并根据其角色显示UI。所以我使用SignInManager、RoleManager和UserManager来完成所有这些。目前还没有涉及API。正在使用具有存储库模式的EF Core

现在,客户要求我将此web应用程序的lite版本开发为本机应用程序。为此,我显然需要API。涉及到很多业务规则,所以我的计划是在同一个解决方案中创建一个API项目,并定义API方法,这些方法将调用我的业务层,其中包含编写的规则。因此,所有业务逻辑都集中在一个地方,可以通过web应用程序和移动应用程序访问

我正在探索保护Web API的最佳实践,在那里我找到了IdentityServer 4。我已成功配置IdentityServer4。它正在运行。从API的角度来看,我很清楚我需要做什么。我希望我现有的web应用程序也使用IdentityServer4进行身份验证和授权。如前所述,我需要在创建员工时在后台创建Asp.Net用户,因此我在业务层中使用了UserManager和RoleManager

我不确定这是否是一个有效的方案。但我只想用IdentityServer替换web应用程序中的身份验证(实际登录、忘记密码、重置密码)部分,但创建AspNetuser和业务层中角色的自定义逻辑应该保持不变

当我从启动中删除AddIdentity()部分时,它开始抛出我在业务层中使用的SignInManager、RoleManager和UserManager的DI异常

services.AddIdentity<ApplicationUser, ApplicationRole>(options =>
{
    options.User.RequireUniqueEmail = true;
})
.AddEntityFrameworkStores<AppDbContext>()
.AddDefaultUI()
.AddDefaultTokenProviders();
services.AddIdentity(选项=>
{
options.User.RequireUniqueEmail=true;
})
.AddEntityFrameworkStores()
.AddDefaultUI()
.AddDefaultTokenProviders();
我无法删除它们,因为在创建员工时幕后创建了用户


只要我的业务层受到的影响最小,我愿意接受建议。

您的解决方案设计方式有问题

当我从启动中删除AddIdentity()部分时,它开始为我在业务层中使用的SignInManager、RoleManager和UserManager抛出DI异常

因为您有一个IdentityServer4,所以实际上不需要使用SignIn manager或RoleManager

当我说不需要时,实际上我的意思是,您不应该在客户端应用程序上使用SignIn和/或RoleManager,因为该应用程序不应该有任何类型的authen/author逻辑,这些都应该重定向到IdentityServer端点,而IdentityServer端点每次都会回复指定的回调端点

现在,对于UserManager,这是3个服务中唯一一个真正在业务中占有一席之地的,您可以像使用任何其他服务一样插入Manager,即
servies.AddTransient并通过注入在任何地方使用它。

您可以将ASP.NET核心标识与IdentityServer一起使用,但请注意,AddIdentity和@ZhiLv第二个链接对我来说是有意义的。我将尝试这个并分享结果。非常感谢您的努力。我不知道服务。还有一件事。我认为只有当我们添加了服务时,IUserManager才可用。我现在就试试这个。