使用IdentityServer4的用户注册流程

31

我希望在我的ASP.NET Core MVC web应用程序中使用IdentityServer4进行身份验证,但用户注册流程似乎很别扭。大多数需要用户注册的网站不会将您重定向到单独的网站(例如Facebook、Twitter等)以使用本地用户帐户进行注册。

一种解决方案是在与我的MVC客户端相同的进程中托管IdentityServer4,但这是不被推荐的。

是否有任何使用IdentityServer4进行本地用户注册的好的现实世界示例?


2
为什么不直接在MVC应用程序中使用ASP.NET身份验证?没有必要使用IdentityServer(除非我漏掉了什么)。当您想要跨多个应用程序(即客户端)访问许多API(即资源)时,需要IdS作为独立的身份验证/授权服务器。 - travis.js
我不这么认为。但是没有任何阻止你创建一个注册用户的API,它可以与你的IDS系统并存。 - Lutando
1个回答

39

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

  • 身份验证服务器
  • 受保护的API
  • 身份提供者(aspnet core identity)项目

通过对API的调用来创建用户,并在身份提供者中创建适当的结构。 我们的身份验证服务器在验证令牌请求时调用身份提供者。 我们的API使用身份验证服务器来保护资源,使用身份提供者检索关于该用户的信息(例如权限),这些信息不能作为声明(claims)包含。

这样,我们的身份提供者可以跨项目共享(具有不同角色的单个用户库),而 Identity Server 纯粹用于验证用户。所有用户管理功能属于其他位置。


编辑: @peyman 我们没有做任何特别突破性的事情:只是使用 aspnet core identity 框架 (http://odetocode.com/blogs/scott/archive/2013/11/25/asp-net-core-identity.aspx)。

IUserStoreUserManager 是主要驱动程序。当创建用户时,它们被分配一个角色,对于我们来说,这基于请求创建该用户的应用程序。我们的 IUserStore 实现将是 IdentityServer 在验证身份时最终调用的内容,提供的数据用于构建声明。我们的资源API使用基于声明的授权的 Policies 相对简单地受到保护(https://learn.microsoft.com/en-us/aspnet/core/security/authorization/claims)。


7
这真的很有帮助。我仍在努力想象使用IdentityServer发放身份和访问令牌的整个流程,如何将用户身份与应用程序特定权限隔离等等。因此,您的IdentityServer调用IdentityProvider。您的身份提供者是单独的API还是作为主要的asp.net网站的一部分?那么您如何保护您的身份提供者呢? 您的IdentityServer会调用IdentityProvider,而身份提供者可以是独立的API或作为主要的asp.net网站的一部分。您可以使用一些安全措施来保护您的身份提供者,例如:限制对API的访问,使用SSL证书进行数据加密等等。 - DMannion
1
在我们的特定情况下,我们的身份提供者是基础设施上的API,该基础设施不可公开访问:它只能从演示基础设施调用。虽然还有其他架构,但我看到一些将身份提供者作为IdentityServer的一部分。我自己没有做过这个,我只能猜测他们提供了新的端点(一些开放的,一些受保护的)来允许其他API /站点访问。 - Mashton
嗨@Mashton,我有一个类似的情况,我有一个SaaS应用程序,其中包含多个项目(aps.net表单网站),这些项目具有不同的数据库,并且希望使用单个IDP,但对于用户验证,我希望IDP连接到他们每个数据库。因此,不确定如何根据客户端来解决这个问题? - cvetyab
1
嗨@Mashton,你能为我们提供一些身份提供者的代码,特别是用于权限管理的代码吗?以及如何在资源API上使用它? - peyman
1
嗨@Mashton,你是否已经将IdentityProvider实现为Web API项目?你能描述一下IdentityServer和IdentityProvider之间的数据交换是如何进行的吗?用户密码验证是在哪里实现的?你发送了哪些数据到IdentityProvider,返回了哪些数据到IdentityServer?谢谢! - Siarhei Kavaleuski
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接