IdentityServer4 - 如何实施模拟

ttu*_*tes 8 impersonation asp.net-core identityserver4 implicit-flow oidc-client-js

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

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

迄今为止找到的资源.

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

InD*_*ten 5

这个怎么做

IdentityServer4 没有规定任何身份验证提供程序。它仅充当其他 OIDC 客户的角色。这就是为什么您可以使用第三方登录提供商、本地帐户等。

在 IdentityServer 中创建一个 ImpersonationController。确保只有您的管理员可以访问此页面。

[Authorize(Policy = "CanImpersonate")]
Run Code Online (Sandbox Code Playgroud)

构建一个页面,您可以在其中输入管理员想要模拟的用户 ID。当使用预期的用户 ID 发布该表单时,请使用该类SignInManager<>来登录当前用户。

您甚至可以构建一个下拉列表,显示您想要模拟的外部登录提供商(如果这对您很重要)。使用该ExternalLoginSignInAsync方法,否则使用普通SignInAsync(user, false)方法。

然后您就已经以该用户身份登录到 Identity Server 上。当您的客户端应用程序请求登录时,IdentityServer 将注意到您的“伪造”会话,并立即使用您当前登录的帐户重定向回客户端。

您现在正在客户端应用程序和 IdentityServer 上模拟该用户。

如果您在 IdentityServer 上注销,您将再次“升级”到之前登录的帐户(如果仍以不同身份登录),或者需要再次以实际管理员帐户身份登录。

你需要注意什么

副作用

这显然是一个值得争论的话题。我假设您想添加此功能,以便您可以重现用户问题,或作为用户执行某些操作。

如果您在用户不知情的情况下执行此操作,请务必小心模拟期间执行的任何操作的副作用。是否发送电子邮件或类似通知。

走这条路会失去很多信任。

法律

这也是对隐私的担忧。谁能够访问详细信息。在您的平台上模拟用户时会泄露哪些详细信息。

一个推荐

不要冒充用户。

实施一种受控方式,使您的管理员可以执行所需的工作。然后,您就有了一致的审核日志,无论登录用户对您的系统执行什么操作,您都可以确定是该用户,而不是冒充该帐户的管理员。


tra*_*.js 0

可能不会尝试在核心 IdentityServer4 库中构建模拟功能。您实际上只需要一个小的数据结构来保存您模拟的 UserId 和一个服务来检查它。这是您的应用程序设计时应围绕的基础功能。

还要考虑,您可能需要即使您正在模仿(例如,非模仿)仍然能够呈现出来的超级用户功能。