【问题标题】:Asp.Net core Web Application with IdentityServer4 and Identity both具有 IdentityServer4 和 Identity 的 Asp.Net 核心 Web 应用程序
【发布时间】: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 entity-framework-core asp.net-identity identityserver4 razor-pages


【解决方案1】:

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

“当我从 Startup 中删除 AddIdentity() 部分时,它开始为我在业务层中使用的 SignInManager、RoleManager 和 UserManger 引发 DI 异常。”

由于您拥有 IdentityServer4,因此实际上无需使用登录管理器或 RoleManager。

当我说没有必要时,我的意思是你不应该在客户端应用程序上使用 SignIn 和/或 RoleManager,因为应用程序不应该有任何类型的身份验证/作者逻辑,这些都应该被重定向到 IdentityServer 端点,该端点每次都会回复指定的回调端点。

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

【讨论】:

  • 我不知道 services.AddTransient 的事情。我认为 IUserManager 只有在我们添加了 services.AddIdentity(...) 时才可用。我现在就试试这个。
猜你喜欢
  • 2017-06-17
  • 2020-01-10
  • 1970-01-01
  • 2018-05-14
  • 2020-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-16
相关资源
最近更新 更多