比方说,我必须与维护用户的旧式企业系统集成。假设此企业系统提供具有以下两种方法的C#SDK:
身份验证:
sdk.Authenticate("Region", "Username", "Password")
请注意,Region
是用户在登录时选择的附加参数。因此,除了用户凭据之外,我还需要能够读取此自定义参数。 (是的登录将是交互式的。)
个人资料检索:
sdk.GetProfile(UserId)
我想使用IdentityServer以常规方式生成令牌,但是使用这两种方法来实现自定义身份验证和配置文件检索。
我可以看到扩展IProfileService
可以整合配置文件检索和自定义声明填充。但是,我在文档中看到以下多个可扩展性点,但不确定最好的方法是什么;
快速入门UI的Account Controller
的{{1}}方法:我应该能够在此处放置Login(LoginInputModel model, string button)
逻辑,只需调用_signInManager.SignInAsync即可登录用户。但这似乎并不像我直接扩展IdentityServer4来添加对另一个自定义身份验证提供程序的支持。
IExtensionGrantValidator:
This answer和IdentityServer Docs解释了一种进行自定义授予的方法,我应该可以使用该方法来调用sdk.Authenticate("Region", "Username", "Password")
。但这意味着我将使用自定义授予类型。我需要能够支持现有的拨款类型,例如混合。我看到通过sdk.Authenticate("Region", "Username", "Password")
方法中的context
参数支持自定义参数
IResourceOwnerPasswordValidator:
This IdentityServer doc解释了如何为资源所有者流实现自定义密码验证器。但是我需要能够支持现有的赠款类型,例如混合型。我看到通过ValidateAsync(ExtensionGrantValidationContext context)
方法中的context
参数支持自定义参数
外部身份验证器:
This IdentityServer doc说明了如何添加外部身份验证器。但是我看不到非标准身份验证器的ValidateAsync(ResourceOwnerPasswordValidationContext context)
方法。我只看到对流行的身份验证器(例如Google)的支持。
我想念什么?
答案 0 :(得分:0)
我选择使用问题中提到的第一个选项:快速入门UI的Account Controller
的{{1}}方法