IdentityServer4:集成用于身份验证和配置文件检索的自定义源的惯用方式是什么?

时间:2019-05-28 08:43:13

标签: c# identityserver4 identity extensibility custom-authentication

比方说,我必须与维护用户的旧式企业系统集成。假设此企业系统提供具有以下两种方法的C#SDK:

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

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

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

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

  1. 快速入门UI的Account Controller的{​​{1}}方法:我应该能够在此处放置Login(LoginInputModel model, string button)逻辑,只需调用_signInManager.SignInAsync即可登录用户。但这似乎并不像我直接扩展IdentityServer4来添加对另一个自定义身份验证提供程序的支持。

  2. IExtensionGrantValidator: This answerIdentityServer Docs解释了一种进行自定义授予的方法,我应该可以使用该方法来调用sdk.Authenticate("Region", "Username", "Password")。但这意味着我将使用自定义授予类型。我需要能够支持现有的拨款类型,例如混合。我看到通过sdk.Authenticate("Region", "Username", "Password")方法中的context参数支持自定义参数

  3. IResourceOwnerPasswordValidator: This IdentityServer doc解释了如何为资源所有者流实现自定义密码验证器。但是我需要能够支持现有的赠款类型,例如混合型。我看到通过ValidateAsync(ExtensionGrantValidationContext context)方法中的context参数支持自定义参数

  4. 外部身份验证器: This IdentityServer doc说明了如何添加外部身份验证器。但是我看不到非标准身份验证器的ValidateAsync(ResourceOwnerPasswordValidationContext context)方法。我只看到对流行的身份验证器(例如Google)的支持。

我想念什么?

1 个答案:

答案 0 :(得分:0)

我选择使用问题中提到的第一个选项:快速入门UI的Account Controller的{​​{1}}方法