【问题标题】:IdentityServer4 Usermanagement with separate MVC Client (AspNetIdentity)IdentityServer4 用户管理与单独的 MVC 客户端 (AspNetIdentity)
【发布时间】:2019-10-30 07:01:36
【问题描述】:

经过大量阅读和反复试验,我的目标设计工作了:

  1. IdentityServer4(独立于 AspNetIdentity)和 IdentityUser 数据库
  2. MVC 客户端(独立),这是用户的前端,目前没有数据库链接
  3. 1-n 个 WebAPI,为 MVC 客户端提供功能并拥有自己的数据库

目前我使用现有的 IdentityUser 数据库并将 IS4 指向该数据库,手动添加角色和声明以进行测试。

我的问题是关于注册新用户的最佳做法。

由于 MVC 客户端是用户的前端,因此此处应显示用户注册的链接。

但是从技术上讲,注册是在哪里完成的?

  1. 我应该在 MVC 客户端中执行此操作(使用默认的 IdentityUser 注册)并将数据库指向 IS4 数据库还是
  2. 我是否应该在 IS4 应用程序中添加一个注册函数以使 MVC 客户端不依赖任何数据库,并将 MVC 客户端“注册”链接指向此 IS4 注册函数?

【问题讨论】:

  • 如果您指的是与用户帐户和传统AccountController 相关的所有内容,即注册更改密码锁定/解锁/删除Usermanagement 下,那么@VidmantasBlazevicius 的回答就足够了,Identityserver 是一致性原因的最佳位置。但是,如果您的意思是访问控制,那么请查看@Ruard 的答案并将这些内容放入一个 应用程序中,而不是您已经拥有的用于业务需求的应用程序。
  • 对控制器的访问控制和客户端对 API 的访问已经用 IS4 实现了。这实际上只是关于将用户注册放在何处的最佳实践。
  • 因此您将第二个答案标记为最适合您的问题,现在您说您的实施与已证明的建议完全相反。你真奇怪,但这就是你的选择:)
  • 我不想在这里大讨论。我写的身份验证和授权已经 IS4 实现了。这意味着 MVC 客户端和 WebAPI 中的 [Authorize] 属性按预期工作 - 具有 IS4 功能。我的问题纯粹是关于 哪里 user REGISTRATION 应该被实施。并且我在标记的答案中得到了合适的答案,将注册放入IS4应用程序中。

标签: asp.net-mvc .net-core identityserver4


【解决方案1】:

基本上 IdentityServer 有两个职责:

  1. 验证用户身份
  2. 授权客户端

IdentityServer 的“问题”是用户不限于一个应用程序。虽然 MVC 网站可能是您的前台,但 IdentityServer 不会将用户与特定应用程序相关联。一旦通过身份验证,用户就可以访问所有使用 IdentityServer 作为身份验证服务器的应用程序。

那么在MVC网站上注册用户有意义吗?可能不会,因为用户也可以访问(未来的)“mvc2”网站。

IdentityServer 的创建者承认了这一点,因此他们创建了PolicyServer

我们认为将“身份和访问管理”紧密耦合在一个 单一的解决方案是错误的方法。这两个问题应该是 明显分开。

换句话说:身份验证是 IdentityServer 的一部分,而(用户的)授权不是。

回到问题,用户的注册应该由 IdentityServer 管理。因为这是唯一可以访问身份存储的应用程序。此外,用户也可以在不被应用重定向的情况下注册。

关键是如何管理(用户的)授权。这实际上不是 IdentityServer 的一部分。我不会详细介绍,因为这超出了问题的范围。

但要回答你的问题,我会做什么(包括电子邮件验证,但没有自动登录):

向 IdentityServer 添加注册功能并实现 ReturnUrl(就像登录的情况一样)。

在您的 mvc 网站上添加指向 IdentityServer 上注册功能的链接。让用户在 IdentityServer 中注册,发送一个电子邮件验证链接,将用户发送到登录页面(保留返回 url),允许用户在注册并登录后重定向回 mvc 网站。

如何为注册用户添加授权是一个不同的问题。

【讨论】:

  • 感谢您的回答。正如我所说,我能够在 my 设计中进行身份验证和授权。这确实是一个关于在哪里进行用户注册的问题。你的回答似乎是合理的,这就是我要走的路。谢谢!
【解决方案2】:

我不会交替使用“用户管理”和“用户注册”。用户管理不仅仅是注册。但要回答你的问题:

我应该在 MVC 客户端中执行此操作(使用默认 IdentityUser 注册)并将数据库指向IS4数据库或

你可以,而且不会有什么大问题。这在很大程度上取决于您的业务需求,但我经常看到身份提供者(在本例中是您的 IdentityServer4)中内置了“用户注册”。

【讨论】:

    猜你喜欢
    • 2021-05-03
    • 1970-01-01
    • 2021-06-26
    • 1970-01-01
    • 2017-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多