使用 IDS4 和自定义数据库进行用户管理
本文讨论使用 Identity Server 4 进行身份验证和授权:使用 Identity Server 4 和 ASP.NET Core Identity 的标准、开箱即用的用户管理解决方案,以及主要主题:配置 Identity Server 4 以使用自定义用户数据库——许多组织可能就是这种情况。
1. 身份服务器 4
大多数现代应用程序涉及移动和/或 Web 客户端和服务层 (API),跨越多个层(前端、中间层和后端)。所有这些层都必须保护资源并针对一个或多个用户存储实施身份验证和授权。实现此目的的典型方法是实施 Identity Server。
Identity Server 是一个 OpenID Connect 提供者。它实现了 OpenID Connect 和 OAuth 2.0 协议。
Identity Server 具有多项工作和功能,包括:
- 保护您的资源
- 使用本地帐户存储或通过外部身份提供者对用户进行身份验证
- 提供会话管理和单点登录
- 管理和验证客户
- 向客户发放身份和访问令牌
- 验证令牌
这些交互如下图所示:
IDS4 如何完成所有这些功能是一个更大的课题。在这里,我们正在处理资源,特别是用户的身份数据。
2. 使用 IDS4 和 ASP.NET Core Identity 进行用户管理
IdentityServer 旨在实现灵活性,并允许您为用户及其数据(包括密码)使用任何您想要的数据库。如果您从一个新的用户数据库开始,那么 ASP.NET Identity 是您可以选择
的一个选项。实现此目的的方法是为 ASP.NET Identity 创建一个新项目并将其配置为使用 Identity Server。一个实际的例子可以在这里找到。您可以分叉此存储库并克隆它并在本地构建它。您需要拥有 .NET Core 2.1 SKD 才能构建和编译此解决方案。请特别注意 DbContext 和 IdentityRoles 的 Startup.cs,以及资源和客户端的 Config.cs。
3. 使用 IDS4 和自定义数据库进行用户管理
上述案例在从头开始构建用户数据库时非常有用。但在实践中,可能存在不使用 AP.NET 身份的现有用户数据库,您需要将 IDS 实现为针对此用户数据库为客户端应用程序提供服务的授权和身份验证服务。
为了实现这一点,IDS4 提供了以下接口,这些接口需要在您的 Identity Server 自定义实现中实现:
- IProfileService
- IResourceOwnerPasswordValidator
在实现方面,ProfileService 类将实现 IProfileService 接口。ProfileService 可以派生一个用户管理器类,该类通常负责授权,并且可以:
- 从用户列表中拉出一个用户
- 根据数据库检查密码的哈希值
- 根据数据库验证电子邮件地址/用户 ID 组合。
ProfileService 必须实现 GetProfileDataAsync 和 IsActiveAsync 方法。GetProfileDataAsync 应为用户加载声明,IsActiveAsync 应指示是否允许用户获取令牌。可以在此处找到有关此内容的更多详细信息。
在实现方面,一个名为“ResourceOwnerPasswordValidator”的类应该实现接口“IResourceOwnerPasswordValidator”,用于身份验证。这里需要实现的方法是ValidateAsync。该方法的职责是检查数据库中的UserName和Password,如果验证成功则返回用户,否则返回null。更多信息在这里。
这反映了 Identity Server 提供的高度灵活性,它定义了一个扩展点,允许根据用户的需要动态加载声明。可以在此处找到更多详细信息和代码示例。
最后,如果您需要任何其他帮助,或者对使用 Identity Server 4 和自定义数据库进行用户管理有其他疑问,请给我们打电话。我们很乐意帮助您入门。
https://anexinet.com/blog/user-management-with-ids4-and-a-custom-database/

浙公网安备 33010602011771号