IdentityServer4:集成自定义源以进行身份​​验证和配置文件检索的惯用方法是什么?

IdentityServer4: What is the Idiomatic Way to Integrate a Custom Source for Authentication and Profile Retrieval?

假设我必须与维护用户的遗留企业系统集成。假设这个企业系统提供了一个C#SDK,有两个方法如下:

  1. 身份验证: sdk.Authenticate("Region", "Username", "Password") 请注意,Region 是用户在登录时选择的附加参数。因此,除了用户凭据之外,我还需要能够读取此自定义参数。 (是的,登录将是交互式的)。

  2. 个人资料检索: sdk.GetProfile(UserId)

我想使用 IdentityServer 以通常的方式生成令牌,但使用这两种方法来实现自定义身份验证和配置文件检索。

我可以看到扩展 IProfileService 我应该能够集成配置文件检索和自定义声明的填充。但是我在文档中看到了以下多个扩展点,但不确定最好的方法是什么;

  1. 快速入门UI的Account ControllerLogin(LoginInputModel model, string button)方法:我应该可以将sdk.Authenticate("Region", "Username", "Password")逻辑放在这里然后调用_signInManager.SignInAsync 登录用户。但感觉我并没有直接扩展 IdentityServer4 以添加对另一个自定义身份验证提供程序的支持。

  2. IExtensionGrantValidator: and IdentityServer Docs 解释一种进行自定义授权的方法,我应该可以使用它来调用 sdk.Authenticate("Region", "Username", "Password")。但这意味着我将使用自定义授权类型。我需要能够支持现有的授权类型,例如混合。我通过 ValidateAsync(ExtensionGrantValidationContext context) 方法

  3. 中的 context 参数看到了对自定义参数的支持
  4. IResourceOwnerPasswordValidator: This IdentityServer doc 解释了如何为资源所有者流程实施自定义密码验证程序。但我需要能够支持现有的授权类型,例如 Hybrid。我通过 ValidateAsync(ResourceOwnerPasswordValidationContext context) 方法

  5. 中的 context 参数看到了对自定义参数的支持
  6. 外部验证器: This IdentityServer doc 解释了如何添加外部验证器。但是我没有看到非标准验证器的 .AddCustom 方法。我只看到对 Google.

  7. 等流行验证器的支持

我错过了什么?

我选择了问题中提到的第一个选项:快速启动 UI 的 Account ControllerLogin(LoginInputModel model, string button) 方法