【问题标题】:As administrator, get access token on behalf of another user作为管理员,代表其他用户获取访问令牌
【发布时间】:2020-08-26 15:10:35
【问题描述】:

我正在尝试实现 IdentityServer4。当我们是管理员时,我们需要以其他用户身份登录的功能。

我已经为普通用户设置了登录功能,但我想要一个特定的端点,管理员可以在其中输入普通用户的用户名/ID。

如何在 IdentityServer4 以及常规的 oauth2 中实现这一点?

【问题讨论】:

    标签: oauth oauth-2.0 identityserver4


    【解决方案1】:

    这超出了 OIDC/OAuth2 交互的范围,但是对于如何在结果令牌/声明中表示这种情况有一些约定。阅读https://www.rfc-editor.org/rfc/rfc8693(尤其是act 声明位)以获得一些灵感。

    我们通过登录 UI 流程做到了这一点,但模型是用户可以明确授予其他用户模拟权限。如果在登录时您拥有有效的模拟授权,那么您将在登录流程中被提示选择其他帐户或继续使用您自己。在您的情况下,您可以识别管理员用户并让他们选择冒充您喜欢的任何人。

    如果用户选择了一个被模仿者,那么它将更改当前会话以代表该用户,但还会在参与者声明 (act) 中存储与原始用户/会话相关的声明,并添加 amr 声明987654325@。然后,我们将这些声明提供给客户,以便他们知道使用了模拟的事实,然后可以将该信息添加到审核日志等。我们还通过电子邮件通知被模拟的用户并限制对帐户设置的访问 - 即模仿者只能以其他用户的身份登录客户端,他们不能更改他们的帐户设置。

    【讨论】:

    • 我知道act 声明可用于模拟,但我不知道应该如何使用 IdentityServer4 来实现。
    • 登录流程本身有点超出 IdentityServer4 的范围,您可以随意实现它。我想我确实修改了一些 IDS4 服务,但是以确保某些声明以我想要的方式呈现(即存储在 act 中的 JSON 片段以正确的格式从授权和令牌端点返回。我可能可以挖掘出来一些例子,如果你能给我提供细节。
    • 我喜欢一些例子。不过,我很难给你任何细节。我只是觉得奇怪的是那里没有显示此特定功能的示例。我知道它不一定是 IDS4 的责任,但它确实是一个身份验证服务器,当我们(开发人员)希望将正在使用的应用程序视为可能的特定用户时,此功能特别有用有问题。 IDS4 有许多我可以继承/派生的类和接口,但我发现很难确定该功能应该放在哪里。
    • 我也很清楚,我基本上是在要求这个社区以及 IDS4 的创建者给我代码,这样才能工作:) 但我在这里有点不知所措,并拼命寻找解决方案。
    • 我认为我的主要指导点是,您可以完全控制存储在身份验证 cookie 中的声明,驱动所有这些,并且可以根据任何用户随时更改它们你喜欢的互动。 identityserver4 authorize 端点将使用该 cookie 中存在的信息来驱动返回的令牌。
    猜你喜欢
    • 2018-02-03
    • 2015-04-05
    • 2020-08-21
    • 1970-01-01
    • 1970-01-01
    • 2020-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多