我要求允许内部支持用户冒充我们的客户用户。
我目前正在使用IdentityServer4,Implicit Flow和OIDC Client。
到目前为止找到的资源。
鉴于网上资源有限,我是否可以/应该使用IdentityServer4实施模拟?
答案 0 :(得分:2)
IdentityServer4没有规定任何身份验证提供程序。它只是其他OIDC客户的一个。这就是为什么您可以使用第三方登录提供程序,本地帐户以及其他任何原因的原因。
在您的IdentityServer中创建一个ImpersonationController。 确保只有您的管理员才能访问此页面。
[Authorize(Policy = "CanImpersonate")]
建立一个页面,您可以在其中输入管理员要模拟的用户ID。
使用所需的用户ID发布该表单时,请使用SignInManager<>
类登录当前用户。
您甚至可以构建一个下拉列表,模拟您想使用的外部登录提供程序,如果这对您很重要。
使用ExternalLoginSignInAsync
方法,否则使用普通的SignInAsync(user, false)
方法。
您已经以该用户身份在Identity Server上登录。当您的客户端应用程序请求登录时,IdentityServer将注意到您的“伪造”会话,并将立即使用您当前登录的帐户重定向回客户端。
您现在正在客户端应用程序和IdentityServer中模拟该用户。
如果您在IdentityServer上注销,则将再次“升级”到您以前登录的帐户(如果仍然以其他身份登录),或者需要再次以实际的管理员帐户登录。
这显然是一个辩论的话题。我假设您要添加此功能,以便可以重现用户问题或以用户身份执行某些操作。
如果您在用户不知情的情况下执行此操作,请特别注意模拟过程中执行的任何操作的副作用。是发送电子邮件还是类似的通知。
沿着这条路线失去很多信任。
这也是对隐私的关注。谁能够访问详细信息。当在您的平台上模拟用户时,会显示什么详细信息。
不要冒充用户。
以一种受控的方式实施,您的管理员可以执行所需的工作。然后,您将获得一个一致的审核日志,并且无论登录用户对系统执行什么操作,都可以确保它是该用户,而不是管理员模拟该帐户。
答案 1 :(得分:0)
可能不会尝试在核心IdentityServer4库中构建模拟功能。您只需要一个小型数据结构来保存您模拟的UserId和一个服务来检查它。这是应用程序应该围绕它设计的基础功能。
另外请注意,即使您模仿(例如,非模仿),您可能还需要仍然存在的超级用户功能。
答案 2 :(得分:0)
您可以实现IResourceOwnerValidation并以自己的方式验证支持用户。 例如,为特定用户生成代码并将其提供给支持用户,然后在您的实现中也使用该代码检查密码。