【发布时间】:2020-08-26 15:10:35
【问题描述】:
我正在尝试实现 IdentityServer4。当我们是管理员时,我们需要以其他用户身份登录的功能。
我已经为普通用户设置了登录功能,但我想要一个特定的端点,管理员可以在其中输入普通用户的用户名/ID。
如何在 IdentityServer4 以及常规的 oauth2 中实现这一点?
【问题讨论】:
标签: oauth oauth-2.0 identityserver4
我正在尝试实现 IdentityServer4。当我们是管理员时,我们需要以其他用户身份登录的功能。
我已经为普通用户设置了登录功能,但我想要一个特定的端点,管理员可以在其中输入普通用户的用户名/ID。
如何在 IdentityServer4 以及常规的 oauth2 中实现这一点?
【问题讨论】:
标签: oauth oauth-2.0 identityserver4
这超出了 OIDC/OAuth2 交互的范围,但是对于如何在结果令牌/声明中表示这种情况有一些约定。阅读https://www.rfc-editor.org/rfc/rfc8693(尤其是act 声明位)以获得一些灵感。
我们通过登录 UI 流程做到了这一点,但模型是用户可以明确授予其他用户模拟权限。如果在登录时您拥有有效的模拟授权,那么您将在登录流程中被提示选择其他帐户或继续使用您自己。在您的情况下,您可以识别管理员用户并让他们选择冒充您喜欢的任何人。
如果用户选择了一个被模仿者,那么它将更改当前会话以代表该用户,但还会在参与者声明 (act) 中存储与原始用户/会话相关的声明,并添加 amr 声明987654325@。然后,我们将这些声明提供给客户,以便他们知道使用了模拟的事实,然后可以将该信息添加到审核日志等。我们还通过电子邮件通知被模拟的用户并限制对帐户设置的访问 - 即模仿者只能以其他用户的身份登录客户端,他们不能更改他们的帐户设置。
【讨论】:
act 声明可用于模拟,但我不知道应该如何使用 IdentityServer4 来实现。
act 中的 JSON 片段以正确的格式从授权和令牌端点返回。我可能可以挖掘出来一些例子,如果你能给我提供细节。
identityserver4 authorize 端点将使用该 cookie 中存在的信息来驱动返回的令牌。