【问题标题】:OIDC - Identifying the Resource ServerOIDC - 识别资源服务器
【发布时间】:2021-12-02 23:49:17
【问题描述】:

如果我正在实现可供多个客户端使用的 OIDC 服务器,并且涉及多个资源服务器。

在授权端点中,我们只得到clientId。根据 RFC,我们没有在授权端点中获得有关资源服务器的任何信息。我如何知道我正在为哪个资源服务器返回 ID 令牌和访问令牌?

我应该有一个唯一的 ClientId 并始终映射到唯一的资源服务器吗?

因此,如果客户端 App A 想要将 OIDC 与资源服务器 X 一起使用 => 那么客户端 ID 将为 ID1

如果客户端 App A 想要将 OIDC 与资源服务器 Y 一起使用 => 那么客户端 ID 将为 ID2

所以根据Client-ID我们就知道资源服务器是什么了。

【问题讨论】:

    标签: oauth-2.0 openid-connect access-token


    【解决方案1】:

    您可以这样做,但在范围参数中更合适地定义对资源的访问,这在授权端点上是必需的。 https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest

    因此,客户端 App A 可以有一个 client_id,并在需要访问服务器 X 时向身份验证端点发送类似“scope=ServerX”的内容,在需要访问服务器 Y 时向身份验证端点发送“scope=ServerY”或“scope= ServerX ServerY" 两者都需要时。由您的 OIDC 实施来定义这些自定义范围并决定是否授予请求。 (“ServerX”和“ServerY”只是这里的示例。它们将作为作用域工作,但您会看到作用域通常具有长命名空间以使其具有普遍的唯一性。)

    您可以在 Google 的 OAuth Playground (https://developers.google.com/oauthplayground/) 上看到这种方法。 Google 有一项 OAuth 服务来控制对数十种资源的访问,这些资源被定义为范围。请注意,您必须先选择所需的资源,然后才能访问授权端点。

    【讨论】:

    • 谢谢@lednicky。这是有道理的。因此,如果客户端想要为范围为“admin”的“Box”服务器请求访问令牌;那么客户端将传递 scope=Box admin 之类的范围,对吗?
    • 通过传递由空格分隔的“Box”和“admin”,您传递了两个不同的范围。你可以这样设计,但我更经常看到“Box:admin”或“admin_box”之类的东西。快速搜索一下 Curity 的这篇文章,它有助于您做出有关范围的设计决策:curity.io/resources/learn/scope-best-practices 还请阅读“声明”,因为范围是一组声明。
    • 谢谢@Lednicky。如果我们正在使用 Box、AWS 等资源服务器,它们已经具有预定义的范围,并且它可能不是像“Box:admin”或“admin_box”这样的格式。所以我想知道在这些情况下如何识别资源服务器。再次感谢分享链接。
    猜你喜欢
    • 2021-11-16
    • 2020-02-02
    • 2022-01-07
    • 2018-07-24
    • 2017-05-06
    • 2023-03-10
    • 2012-08-15
    • 1970-01-01
    • 2020-01-08
    相关资源
    最近更新 更多