允许支持者以其他用户身份登录
Allow supporter to sign in as another user
我们目前有一个身份服务器 4 应用程序。使用 entity framework 核心和 asp .net 标识。
我们有一群支持者需要能够访问我们的用户帐户,以帮助他们解决 phone 上的问题。我们的用户无法弄清楚如何使用团队查看器。由于他们中的大多数都是移动的,并且当时只有一个小区phone。
我知道允许其他人登录您的帐户的所有安全后果,但确实没有办法解决这个问题。我们的客户已经接受我们的支持者可以在他们请求时连接到他们的帐户。我们相信我们的支持者只会在收到要求时才这样做。
当前解决方案及其问题
当前的黑客创建了一个 api 端点,只有我们的支持者可以使用它,因为它已被锁定,因此只有获得支持者许可的人才能使用它。他们向用户发送电子邮件,我们为他们创建了一个访问令牌,然后应用程序(Web 版本)使用该令牌来像遇到问题的用户一样行事。
这个解决方案是由我的前任创建的,基本上是通过获取支持者访问令牌并将所有带有此支持者 ID 的声明替换为用户 ID,然后 return 将其发送到应用程序。我在很多层面上都讨厌这个解决方案,而且它非常不稳定,每次我看到这个方法都会崩溃。目前它不起作用,因为观众蛤由于某种原因不正确。
我想做什么
我真的很想以一种不那么黑客的方式来做这件事。那么,有没有一种方法可以让用户登录到应用程序,而无需实际是他们在进行登录和 return 访问令牌?
我试过
await _signInManager.SignInAsync(user, false, null);
但我无法弄清楚如何将其获取到 return 访问令牌。
我真正想做的是让支持者能够以某种方式安全地登录任何帐户。
用户帐户的问题是它没有绑定到一个应用程序。因此,通过允许其他人使用该帐户登录,您也授予他们访问其他应用程序的权限。作为解决方法,您可以使用 'public' 个帐户,例如 engineer_01、engineer_02 等
但是,这可能根本没有必要。您真正想要的 IMO 是模拟用户,而不是 'hacking' 帐户。
一种方法是使用 extension grants.
使用自定义授权类型扩展 IdentityServer
这是如何工作的:
允许模拟特定 client/resource 用户的 signed-in 用户在新的模拟端点请求访问令牌。
用户从用户发送 sub
以模拟到端点,用户和(的组合)sub 在这里得到验证。
授予访问权限后,将返回一个新的 (short-lived) 访问令牌,该令牌可用于模拟用户,而无需知道用户的凭据。
访问令牌应包含端点信息,以便确定用户是否被冒充。
我们实现了集成到 browser-based 登录流程中的模拟功能。如果有权限的用户选择以另一个用户的身份登录,那么我们会向他们的 IDS4 身份验证 cookie 添加额外的声明,然后支持在生成的令牌中发出额外的声明,以反映这是一个模拟会话以及原始参与者是谁。
- 导航到客户端应用程序
- 使用任何凭据登录
- 检查是否存在任何模拟权限(如何定义完全取决于您)
- 提示选择模拟帐户(或以自己的身份继续)
- 以所选账号登录(有原演员记录)
- 重定向以授权端点
- 颁发令牌并重定向回客户端应用程序
我们目前有一个身份服务器 4 应用程序。使用 entity framework 核心和 asp .net 标识。
我们有一群支持者需要能够访问我们的用户帐户,以帮助他们解决 phone 上的问题。我们的用户无法弄清楚如何使用团队查看器。由于他们中的大多数都是移动的,并且当时只有一个小区phone。
我知道允许其他人登录您的帐户的所有安全后果,但确实没有办法解决这个问题。我们的客户已经接受我们的支持者可以在他们请求时连接到他们的帐户。我们相信我们的支持者只会在收到要求时才这样做。
当前解决方案及其问题
当前的黑客创建了一个 api 端点,只有我们的支持者可以使用它,因为它已被锁定,因此只有获得支持者许可的人才能使用它。他们向用户发送电子邮件,我们为他们创建了一个访问令牌,然后应用程序(Web 版本)使用该令牌来像遇到问题的用户一样行事。
这个解决方案是由我的前任创建的,基本上是通过获取支持者访问令牌并将所有带有此支持者 ID 的声明替换为用户 ID,然后 return 将其发送到应用程序。我在很多层面上都讨厌这个解决方案,而且它非常不稳定,每次我看到这个方法都会崩溃。目前它不起作用,因为观众蛤由于某种原因不正确。
我想做什么
我真的很想以一种不那么黑客的方式来做这件事。那么,有没有一种方法可以让用户登录到应用程序,而无需实际是他们在进行登录和 return 访问令牌?
我试过
await _signInManager.SignInAsync(user, false, null);
但我无法弄清楚如何将其获取到 return 访问令牌。
我真正想做的是让支持者能够以某种方式安全地登录任何帐户。
用户帐户的问题是它没有绑定到一个应用程序。因此,通过允许其他人使用该帐户登录,您也授予他们访问其他应用程序的权限。作为解决方法,您可以使用 'public' 个帐户,例如 engineer_01、engineer_02 等
但是,这可能根本没有必要。您真正想要的 IMO 是模拟用户,而不是 'hacking' 帐户。
一种方法是使用 extension grants.
使用自定义授权类型扩展 IdentityServer这是如何工作的:
允许模拟特定 client/resource 用户的 signed-in 用户在新的模拟端点请求访问令牌。
用户从用户发送 sub
以模拟到端点,用户和(的组合)sub 在这里得到验证。
授予访问权限后,将返回一个新的 (short-lived) 访问令牌,该令牌可用于模拟用户,而无需知道用户的凭据。
访问令牌应包含端点信息,以便确定用户是否被冒充。
我们实现了集成到 browser-based 登录流程中的模拟功能。如果有权限的用户选择以另一个用户的身份登录,那么我们会向他们的 IDS4 身份验证 cookie 添加额外的声明,然后支持在生成的令牌中发出额外的声明,以反映这是一个模拟会话以及原始参与者是谁。
- 导航到客户端应用程序
- 使用任何凭据登录
- 检查是否存在任何模拟权限(如何定义完全取决于您)
- 提示选择模拟帐户(或以自己的身份继续)
- 以所选账号登录(有原演员记录)
- 重定向以授权端点
- 颁发令牌并重定向回客户端应用程序