Asp.net core IdentityServer4-如何实现模拟

Asp.net core IdentityServer4-如何实现模拟,asp.net-core,impersonation,identityserver4,oidc-client-js,implicit-flow,Asp.net Core,Impersonation,Identityserver4,Oidc Client Js,Implicit Flow,我要求允许我们的内部支持用户模拟我们的客户用户 我目前正在使用IdentityServer4、隐式流和OIDC客户端 目前发现的资源 鉴于在线资源有限,是否有关于如何使用IdentityServer 4实现模拟的建议?可能不会尝试在核心IdentityServer 4库中构建模拟功能。您实际上只需要一个小的数据结构来保存模拟的用户ID,并需要一个服务来检查它。它是一个应用程序设计的基础特征。 还考虑,您可能需要即使在冒充(例如未模拟)的情况下仍然存在的超级用户特征。如何做到这一点 Ide

我要求允许我们的内部支持用户模拟我们的客户用户

我目前正在使用IdentityServer4、隐式流和OIDC客户端

目前发现的资源


鉴于在线资源有限,是否有关于如何使用IdentityServer 4实现模拟的建议?

可能不会尝试在核心IdentityServer 4库中构建模拟功能。您实际上只需要一个小的数据结构来保存模拟的用户ID,并需要一个服务来检查它。它是一个应用程序设计的基础特征。

还考虑,您可能需要即使在冒充(例如未模拟)的情况下仍然存在的超级用户特征。

如何做到这一点 IdentityServer4没有规定任何身份验证提供程序。对于其他OIDC客户机,它本身只是一个。这就是为什么您可以使用第三方登录提供商、本地帐户和其他任何东西

在IdentityServer中创建ImpersonationController。 请确保只有管理员才能访问此页面

[Authorize(Policy = "CanImpersonate")]
构建一个页面,您可以在其中输入管理员想要模拟的用户ID。 使用预期用户ID过帐表单时,请使用
SignInManager
类登录当前用户

你甚至可以建立一个下拉列表,如果这对你很重要的话,你想用什么样的外部登录提供者来模拟。 使用
ExternalLoginSignInAsync
方法,否则使用普通
SignInAsync(user,false)
方法

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

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

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

你需要注意什么 副作用 这显然是一个值得讨论的话题。我假设您希望添加此功能,以便可以重现用户问题,或者作为用户执行一些操作

如果您在用户不知道的情况下执行此操作,请非常小心在模拟过程中执行的任何操作的副作用。是否发送电子邮件或类似通知

在这条路上会失去很多信任

法律 这也是对隐私的关注。谁能够访问详细信息。在您的平台上模拟用户时会显示哪些详细信息

推荐 不要模拟用户


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

您可以实施IResourceOwnerValidation,并以自己的方式验证您的支持用户。
例如,为特定用户生成一个代码,并将其提供给支持用户,然后在您的实现中也使用该代码检查您的密码。

如果有人知道如何实现这一点,只需我的2美分,但IdentityServer4服务器不能将其自身用作登录提供商,因此,就像你如何通过gmail/facebook/ect进行身份验证以获得用户令牌一样,超级用户可以通过身份验证并获得用户令牌。有人问了类似的问题。在经过身份验证的用户声明中存储模拟用户的用户ID是否安全?我不认为这是不安全的,只是与身份验证系统无关,更像是应用程序的责任,其中模拟是一项功能