【发布时间】:2021-02-15 21:12:28
【问题描述】:
我有一个使用 Asp.Net Identity 进行用户管理的 Asp.Net 核心 Web 应用程序。应用程序创建员工,并在创建员工时;我必须相应地创建一个 AspNetUser 和他的角色。然后,该员工可以登录到应用程序,并根据他的角色显示 UI。所以我使用 SignInManager、RoleManager 和 UserManager 来完成这一切。到目前为止还没有涉及 API。正在使用具有存储库模式的 EF Core。
现在我收到了客户的要求,将这个 Web 应用程序的精简版开发为原生应用程序。为此,我显然需要 API。涉及到很多业务规则,所以我的计划是在同一个解决方案中创建一个 API 项目,并定义将调用我的业务层的 API 方法,其中写入了规则。因此,所有业务逻辑都集中在一个地方,并且可以从 Web 应用程序和移动应用程序访问。
我正在探索保护 Web API 的最佳实践,在那里我找到了 IdentityServer4。我已经成功配置了 IdentityServer4。它已启动并正在运行。我从 API 方面很清楚我需要做什么。我希望我现有的 Web 应用程序也使用 IdentityServer4 进行身份验证和授权。就像之前所说的,我需要在创建员工时在幕后创建一个 Asp.Net 用户,所以我在我的业务层中使用了 UserManager 和 RoleManger。
我不确定这是否是一个有效的场景。但我只想用 IdentityServer 替换我的 Web 应用程序的身份验证(实际上是登录、忘记密码、重置密码)部分,但我在业务层中创建 AspNetuser 和角色的自定义逻辑应该保持不变。
当我从 Startup 中删除 AddIdentity() 部分时,它开始为我在业务层中使用的 SignInManager、RoleManager 和 UserManger 引发 DI 异常。
services.AddIdentity<ApplicationUser, ApplicationRole>(options =>
{
options.User.RequireUniqueEmail = true;
})
.AddEntityFrameworkStores<AppDbContext>()
.AddDefaultUI()
.AddDefaultTokenProviders();
我无法删除它们,因为在创建员工时会在幕后创建用户。
只要我的业务层受到的影响最小,我愿意接受建议。
【问题讨论】:
-
您可以将 ASP.NET Core Identity 与 IdentityServer 一起使用,但请注意 AddIdentity
必须在 AddIdentityServer 之前调用。这里有一些相关的文章,你可以查看它们:use ASP.NET Core Identity with IdentityServer和How To Use ASP.NET Identity And IdentityServer4 In Your Solution。 -
@ZhiLv 第二个链接对我来说很有意义。我会试试这个并分享结果。非常感谢您的努力。
标签: asp.net-core entity-framework-core asp.net-identity identityserver4 razor-pages