Asp.net mvc 具有独立MVC客户端的IdentityServer4用户管理(AsNetIdentity)

Asp.net mvc 具有独立MVC客户端的IdentityServer4用户管理(AsNetIdentity),asp.net-mvc,.net-core,identityserver4,Asp.net Mvc,.net Core,Identityserver4,经过大量阅读和反复试验,我的目标设计得以实现: IdentityServer4(具有AsNetIdentity的独立服务器)和IdentityUser数据库 MVC客户端(独立),这是用户的前端,目前没有数据库链接 1-n WebAPI,为MVC客户端提供功能,并拥有自己的数据库 目前,我使用一个已经存在的IdentityUser数据库,并将IS4指向该数据库,手动添加角色和声明以进行测试 我的问题是关于注册新用户的最佳实践 由于MVC客户端是用户的前端,因此此处应显示指向用户注册的链接 但从技

经过大量阅读和反复试验,我的目标设计得以实现:

  • IdentityServer4(具有AsNetIdentity的独立服务器)和IdentityUser数据库
  • MVC客户端(独立),这是用户的前端,目前没有数据库链接
  • 1-n WebAPI,为MVC客户端提供功能,并拥有自己的数据库
  • 目前,我使用一个已经存在的IdentityUser数据库,并将IS4指向该数据库,手动添加角色和声明以进行测试

    我的问题是关于注册新用户的最佳实践

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

    但从技术上讲,注册是在哪里进行的

  • 我应该在MVC客户机(使用默认的IdentityUser注册)中执行此操作,并将数据库指向IS4数据库还是
  • 我是否应该在IS4应用程序中添加一个注册函数来保持MVC客户端没有任何数据库依赖关系,并将MVC客户端“注册”链接指向此IS4注册函数
  • 我不会交替使用“用户管理”和“用户注册”。用户管理不仅仅是注册,还有很多。但要回答你的问题:

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


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

    基本上,IdentityServer有两个职责:

  • 对用户进行身份验证
  • 授权客户
  • IdentityServer的“问题”在于用户不限于一个应用程序。虽然MVC网站可能是您的前台,但IdentityServer不会将用户与特定应用程序联系起来。经过身份验证后,用户可以访问使用IdentityServer作为身份验证服务器的所有应用程序

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

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

    我们认为,在一个 单一解决方案是错误的方法。这两个问题应该得到解决 明显分开

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

    回到问题上来,用户的注册应该由IdentityServer管理。因为这是唯一可以访问标识存储的应用程序。此外,用户还可以注册,而无需应用程序重定向

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

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

    将注册功能添加到IdentityServer并实现一个ReturnUrl(就像登录一样)

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


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

    如果您指的是与用户帐户和传统的
    AccountController
    相关的一切,即在用户管理下注册、更改密码、锁定/解锁/删除,那么@VidmantasBlazevicius的回答就足够了,由于一致性的原因,Identityserver是最好的地方。然而,如果你指的是访问控制,那么看看@Ruard的答案,把这些东西放到一个新的应用程序中,而不是你已经拥有的用于业务需求的应用程序中。对控制器的访问控制和客户端对API的访问已经用IS4实现了。这实际上是关于将用户注册放在何处的最佳实践。因此,您将第二个答案标记为最适合您的问题,现在您说您的实现与经验证的建议完全相反。你真奇怪,但这是你的全部选择:)我不想在这里大谈特谈。我写的身份验证和授权已经用IS4实现了。这意味着MVC客户机和WebAPI中的[Authorize]属性可以按预期工作—具有IS4功能。我的问题纯粹是关于应该在哪里实现用户注册。我在标记的答案上找到了一个合适的答案,将注册信息放入IS4应用程序。谢谢你的回答。正如我所说,我能够在我的设计中进行身份验证和授权。这确实是一个关于在哪里进行用户注册的问题。你的答案似乎是合理的,这就是我要走的路。谢谢