使用IdentityServer4的用户注册过程

使用IdentityServer4的用户注册过程,identityserver4,Identityserver4,我想在我的ASP.NET核心MVC web应用程序中使用IdentityServer4进行身份验证,但用户注册过程似乎有些笨拙。如果您使用的是本地用户帐户,则大多数需要用户注册的网站都不会重定向到单独的网站(如Facebook、Twitter等)进行注册 一种解决方案是将IdentityServer4托管在与我的MVC客户端相同的进程中,但不鼓励这样做 使用IdentityServer 4注册本地用户有什么好的现实例子吗?IdentityServer用于验证现有用户,而不是真正创建新用户。 在我

我想在我的ASP.NET核心MVC web应用程序中使用IdentityServer4进行身份验证,但用户注册过程似乎有些笨拙。如果您使用的是本地用户帐户,则大多数需要用户注册的网站都不会重定向到单独的网站(如Facebook、Twitter等)进行注册

一种解决方案是将IdentityServer4托管在与我的MVC客户端相同的进程中,但不鼓励这样做


使用IdentityServer 4注册本地用户有什么好的现实例子吗?

IdentityServer用于验证现有用户,而不是真正创建新用户。 在我们的用例中,我们有3个项目参与其中:

  • 身份服务器
  • 受保护的API
  • 身份提供者(aspnet核心身份)项目
用户是通过调用API创建的,API在身份提供程序中创建适当的结构。 我们的身份服务器在验证令牌请求时调用身份提供者。 我们的API使用identity server来保护资源,我们的identity provider来检索我们可能需要的关于该用户的信息,这些信息不包含在声明中(例如,权限)

通过这种方式,我们的身份提供者可以跨项目共享(一个具有不同角色的用户群),而身份服务器仅用于验证用户。所有用户管理功能都属于其他地方


编辑: @peyman我们没有做任何特别的突破性工作:只是使用aspnet核心身份框架()


IUserStore
UserManager
是这方面的主要驱动因素。当用户被创建时,他们会被分配一个角色,对于我们来说,这个角色是基于哪个应用程序请求创建该用户。我们的
IUserStore
实现最终将由IdentityServer在验证身份时调用,并且IdentityServer使用提供的数据建立声明。对于基于声明的授权(),我们的资源API使用
策略
进行了相对简单的保护。

为什么不在MVC应用程序中使用ASP.NET标识呢?不需要IdentityServer(除非我遗漏了什么)。当你需要一个跨多个应用程序(又称客户端)的独立身份验证/授权服务器来访问多个API(又称资源)时,就需要ID。我不这么认为。但是没有什么能阻止你制作一个API来注册用户,这个API和你的IDS一样,非常有用。我仍在努力想象使用IdentityServer发布标识和访问令牌的整个流程,如何将用户标识与特定于应用程序的权限隔离,等等。因此,您的IdentityServer调用您的IdentityProvider。您的身份提供者是单独的API还是asp.net主网站的一部分?那么您如何保护您的身份提供者呢?在我们的特殊情况下,我们的身份提供者是基础结构上的一个API,不可公开访问:它只能从表示基础结构调用。不过,其他体系结构也是可能的,我已经看到一些体系结构将身份提供者作为IdentityServer的一部分。我自己没有这样做,我只能猜测他们提供了新的端点(一些是开放的,一些是受保护的),以允许其他API/站点访问。Hi@Mashton,我有类似的场景,我有一个带有多个项目的Saas应用程序(aps.net表单站点)对于不同的数据库,我希望使用单个IDP,但对于用户验证,我希望IDP连接到各自的数据库。所以不确定如何基于客户端实现这一点?嗨@Mashton,你能为我们提供一些专门用于权限管理的身份提供者代码吗?以及如何在资源Api上使用它?您好@Mashton,您是否将IdentityProvider作为web Api项目实现了?您能描述一下IdentityServer和IdentityProvider之间的数据交换是如何进行的吗?在哪里执行用户密码验证?您将向IdentityProvider发送哪些数据,并将哪些数据返回IdentityServer?非常感谢。