IdentityServer4 的用户注册过程

Posted

技术标签:

【中文标题】IdentityServer4 的用户注册过程【英文标题】:User Registration Process with IdentityServer4 【发布时间】:2017-07-16 00:08:12 【问题描述】:

我想在我的 ASP.NET Core MVC Web 应用程序中使用 IdentityServer4 进行身份验证,但用户注册过程似乎很尴尬。如果您使用本地用户帐户,大多数需要用户注册的网站不会重定向您,而是使用单独的网站(例如 Facebook、Twitter 等)进行注册。

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

是否有任何真实世界中使用 IdentityServer4 进行本地用户注册的优秀示例?

【问题讨论】:

为什么不在 MVC 应用程序中使用 ASP.NET Identity?不需要 IdentityServer(除非我遗漏了什么)。当您需要一个独立的身份验证/授权服务器跨多个访问许多 api(又名资源)的应用程序(又名客户端)时,就需要 IdS。 我不这么认为。但是没有什么能阻止您创建一个注册用户的 API,该 API 与您的 IDS 内容并列。 【参考方案1】:

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

身份服务器 受保护的 API 身份提供者(aspnet 核心身份)项目

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

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


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

IUserStoreUserManager 是这方面的主要驱动力。创建用户时,他们会被分配一个角色,对我们来说,这取决于哪个应用程序请求创建该用户。我们对IUserStore 的实现最终将由 IdentityServer 在验证身份时调用,并且提供的数据由 IdentityServer 用于构建声明。我们的资源 API 使用 Policies 进行基于声明的授权的相对简单的保护 (https://docs.microsoft.com/en-us/aspnet/core/security/authorization/claims)

【讨论】:

这真的很有帮助。我仍在努力可视化使用 IdentityServer 发布身份和访问令牌的整个流程,如何将用户身份与应用程序特定权限隔离开来,等等。因此,您的 IdentityServer 调用您的 IdentityProvider。您的身份提供商是单独的 API 还是您的主 asp.net 网站的一部分?那你如何保护你的身份提供者呢? 在我们的特定情况下,我们的身份提供者是基础设施上的一个 API,不能公开访问:它只能从表示基础设施调用。不过,其他架构也是可能的,而且我已经看到有些架构将身份提供者作为 IdentityServer 的一部分。我自己没有这样做,我只能猜测它们提供了新的端点(一些是开放的,一些是受保护的)以允许其他 api/站点访问。 嗨@Mashton,我有类似的场景,我有多个项目(aps.net 表单站点)和不同数据库的 Saas 应用程序,并且想要使用单个 IDP,但对于用户验证,我希望 IDP连接到他们的每个数据库。所以不知道如何根据客户来解决这个问题? 嗨@Mashton,你能给我们提供一些专门用于权限管理的身份提供者代码吗?以及如何在 Resource Api 上使用它? 嗨@Mashton,您是否将 IdentityProvider 实现为 Web API 项目?您能描述一下 IdentityServer 和 IdentityProvider 之间的数据交换是如何发生的吗?用户密码验证在哪里实现?您将哪些数据发送到 IdentityProvider 以及将哪些数据返回到 IdentityServer?谢谢!

以上是关于IdentityServer4 的用户注册过程的主要内容,如果未能解决你的问题,请参考以下文章

identityserver4 踩坑之不同API的ClaimsPrincipal获取用户信息的Type不一致

IdentityServer4 结合 Mysql 之初体验

Asp.net core IdentityServer4与传统基于角色的权限系统的集成

Asp.Net Core 中IdentityServer4 实战之角色授权详解

Asp.net core IdentityServer4与传统基于角色的权限系统的集成

如何解决 IdentityServer4 中的循环 - 连接/授权/回调?client_id=?