IdentityServer4 - 如何实施模拟

时间:2017-08-07 14:50:26

标签: asp.net-core impersonation identityserver4 oidc-client-js implicit-flow

我要求允许内部支持用户冒充我们的客户用户。

我目前正在使用IdentityServer4,Implicit Flow和OIDC Client。

到目前为止找到的资源。

鉴于网上资源有限,我是否可以/应该使用IdentityServer4实施模拟?

3 个答案:

答案 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并以自己的方式验证支持用户。 例如,为特定用户生成代码并将其提供给支持用户,然后在您的实现中也使用该代码检查密码。