具有 ASP.NET 身份的 IdentityServer4
IdentityServer4 with ASP.NET Identity
我必须为 .NET Core 实现 OAuth,决定是 IdentityServer4。事实上,结果应该是一个身份验证端点,也带有登录 UI、重置密码 UI 等。但是,OAuth 必须适合现有的数据库结构。所以我不能简单地遵循最简单的 'Quickstart' 手册。
我试图理解 IdentityServer4 的概念,但我对 ASP.NET Core Identity 及其在其中的作用感到困惑。据我所知,ASP.NET Core Identity 提供了用户管理框架,包括登录、注册、密码重置等,包括数据库(EntityFramework)。
我有一个必须使用的现有 SQL 数据库,没有机会进行任何更改。但是,结构类似于 ASP.NET Core Identity,因此我认为它可能会被使用(以某种方式)。我找到了如何实现 'custom users'
排序的文章
A/直接到IdentityServer4,文章here
或
B/ 到 ASP.NET 核心身份,文章 here
两种方法都是可行的,回到最初的问题 - 我想更深入地了解 IdentityServer4 并找出它对 ASP.NET Core Identity 的依赖程度。
非常感谢!
IdentityServer4 有 2 个 DbContext,它们是框架的一部分,如果您要将它们存储到数据库,则必须使用它们。用于客户端和流配置的 ConfigurationDbConext。以及用于存储令牌等的 PersistentGrantDbContext。这2个DbContext是IdentityServer4唯一的核心部分。这些也可以存储在内存中,但我不建议这样做。这 2 个 dbcontexts 可以与现有数据库表一起存储,或者如果需要,可以存储在另一个数据库中。
用户管理等不是 IdentityServer 框架的一部分,您可以使用自己喜欢的实现,例如 ASP.NET 核心身份或自定义的东西。在您提到的文章中,魔术发生在 IProfileService
服务中,在该服务中检索用户,在 IResourceOwnerPasswordValidator
中验证凭据。使用这些自定义实现从现有数据库中检索和验证用户。
此外,如果您查看快速入门示例项目,您会看到 UserStore 已注入到每个控制器中。如果需要,请随时将其替换为您自己的用户存储库。因此,为了回答您的问题,IdentityServer4 不依赖于任何 user/role 相关的存储框架,但您可以根据需要附加。
例如:在我的项目中,用户管理和身份验证是 2 个不同的微服务。在集群中,IdentityServer 在内部调用用户服务来获取请求的用户,但它甚至不是 Auth 微服务的一部分。授权服务只关注 OpenId 连接实现,但基本上对用户一无所知。
我必须为 .NET Core 实现 OAuth,决定是 IdentityServer4。事实上,结果应该是一个身份验证端点,也带有登录 UI、重置密码 UI 等。但是,OAuth 必须适合现有的数据库结构。所以我不能简单地遵循最简单的 'Quickstart' 手册。
我试图理解 IdentityServer4 的概念,但我对 ASP.NET Core Identity 及其在其中的作用感到困惑。据我所知,ASP.NET Core Identity 提供了用户管理框架,包括登录、注册、密码重置等,包括数据库(EntityFramework)。
我有一个必须使用的现有 SQL 数据库,没有机会进行任何更改。但是,结构类似于 ASP.NET Core Identity,因此我认为它可能会被使用(以某种方式)。我找到了如何实现 'custom users'
排序的文章A/直接到IdentityServer4,文章here
或
B/ 到 ASP.NET 核心身份,文章 here
两种方法都是可行的,回到最初的问题 - 我想更深入地了解 IdentityServer4 并找出它对 ASP.NET Core Identity 的依赖程度。
非常感谢!
IdentityServer4 有 2 个 DbContext,它们是框架的一部分,如果您要将它们存储到数据库,则必须使用它们。用于客户端和流配置的 ConfigurationDbConext。以及用于存储令牌等的 PersistentGrantDbContext。这2个DbContext是IdentityServer4唯一的核心部分。这些也可以存储在内存中,但我不建议这样做。这 2 个 dbcontexts 可以与现有数据库表一起存储,或者如果需要,可以存储在另一个数据库中。
用户管理等不是 IdentityServer 框架的一部分,您可以使用自己喜欢的实现,例如 ASP.NET 核心身份或自定义的东西。在您提到的文章中,魔术发生在 IProfileService
服务中,在该服务中检索用户,在 IResourceOwnerPasswordValidator
中验证凭据。使用这些自定义实现从现有数据库中检索和验证用户。
此外,如果您查看快速入门示例项目,您会看到 UserStore 已注入到每个控制器中。如果需要,请随时将其替换为您自己的用户存储库。因此,为了回答您的问题,IdentityServer4 不依赖于任何 user/role 相关的存储框架,但您可以根据需要附加。
例如:在我的项目中,用户管理和身份验证是 2 个不同的微服务。在集群中,IdentityServer 在内部调用用户服务来获取请求的用户,但它甚至不是 Auth 微服务的一部分。授权服务只关注 OpenId 连接实现,但基本上对用户一无所知。