我们当前有一个Identity Server 4应用程序。使用实体框架核心和asp .net身份。
我们有一群支持者,他们需要能够访问我们的用户帐户,以便通过电话帮助他们解决问题。我们的用户无法弄清楚如何使用团队查看器。由于它们中的大多数是移动设备,并且当时只有一部手机。
我知道允许其他人登录您的帐户的所有安全后果,但是实际上没有办法解决。我们的客户已接受我们的支持者可以在他们要求时连接到他们的帐户。我们相信我们的支持者只有在要求时才这样做。
当前的黑客创建了一个api端点,只有它的支持者才能使用它,因为它已被锁定,因此只有拥有支持者许可的人才能使用它。他们向用户发送电子邮件,然后我们为他们创建了一个访问令牌,然后该访问令牌将由应用程序(网络版本)使用,以像遇到问题的用户一样操作。
此解决方案是我的前任创建的,基本上是通过获取支持者访问令牌并将所有声明替换为此支持者ID的用户ID,然后将其返回给应用程序。我讨厌这个解决方案,它在很多层面上都是非常不稳定的,每次我看到这种方法都会感到不满意。目前不起作用,因为听众的蛤lam由于某种原因不正确。
我真的很想以一种不太hack的方式做到这一点。那么,有没有一种方法可以使用户登录到该应用程序,而实际上不必由他们来登录并返回访问令牌?
我尝试做
await _signInManager.SignInAsync(user, false, null);
但是我无法弄清楚如何获取返回的访问令牌。
我真正想做的是,支持者能够登录到任何一个帐户,但可以安全地进行登录。
答案 0 :(得分:2)
用户帐户的问题在于它没有绑定到一个应用程序。因此,通过允许其他人使用该帐户登录,您就可以授予其他人访问其他应用程序的权限。解决方法是,您可以使用“公开”帐户,例如engineer_01,engineer_02等。
但是,这根本没有必要。 IMO真正想要的是模拟用户,而不是“黑客”帐户。
一种方法是使用extension grants使用自定义授予类型扩展IdentityServer。
这如何工作:
已允许模拟特定客户端/资源的用户的登录用户在新的模拟端点上请求访问令牌。
用户从用户发送sub
来模拟到端点,在此验证了用户和(的组合)子。
授予访问权限后,将返回一个新的(短期)访问令牌,该令牌可用于模拟用户,而无需了解用户的凭据。
访问令牌应包含端点的信息,以便可以确定是否模拟了用户。
答案 1 :(得分:0)
我们实现了模拟功能,该功能已集成到基于浏览器的登录流程中。如果具有权限的用户选择以其他用户身份登录,则我们会向其IDS4身份验证cookie中添加其他声明,该IDS然后支持在结果令牌中发出额外的声明,以反映这是模拟会话以及原始角色是谁。