具有单独的MVC客户端(AspNetIdentity)的IdentityServer4用户管理

时间:2019-06-16 11:47:23

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

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

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

此刻,我使用一个已经存在的IdentityUser数据库并将IS4指向该数据库,并手动添加角色和声明以进行测试。

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

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

但是注册在哪里进行?

  1. 我应该在MVC客户端(使用默认的IdentityUser注册)中进行操作,并将数据库指向IS4数据库吗?
  2. 是否应该在IS4应用程序中添加注册功能,以使MVC客户端不受任何数据库依赖性的影响,并将MVC客户端的“注册”链接指向该IS4注册功能?

2 个答案:

答案 0 :(得分:1)

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

  

我应该在MVC客户端中使用默认的IdentityUser吗?   注册)并将数据库指向IS4数据库或

您可以,并且不会有任何严重错误。这将在很大程度上取决于您的业务需求,但是我经常看到身份提供程序(在本例中为IdentityServer4)内置了“用户注册”。

答案 1 :(得分:1)

基本上IdentityServer承担两项职责:

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

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

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

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

  

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

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

回到问题,用户的注册应由IdentityServer管理。因为那是唯一有权访问身份存储的应用程序。此外,用户也可以注册而无需被应用程序重定向。

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

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

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

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

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