【发布时间】:2020-05-09 10:36:09
【问题描述】:
在自学 OpenID Connect 时,以下场景引发了一些问题。大多数关于 OIDC/OAuth 的在线文档都假定资源服务器只能从同一“授权领域”内的客户端访问,这意味着客户端和所有资源服务器都受到同一 OIDC 提供程序 (OP) 的保护。
在给定的场景中,客户端受 OP A 保护,并要求用户 A 登录 OP A 才能使用客户端。通过这样做,客户端还从 OP A 接收访问令牌,使其能够代表用户访问资源服务器 A。到目前为止一切顺利。
用户A在Authorization Realm B中也有一个账号,客户端需要访问受OP B保护的资源服务器B。
此资源服务器 B 是一个 API,它调用同一授权领域 B 内的其他 API。所有这些 API/资源服务器对自己的授权领域 B 之外的 OIDC 提供者一无所知。资源服务器 B 不仅可以从来自领域 A 的客户端,也来自来自各个授权领域的 N 个客户端。以我目前的理解,领域 B 中的所有资源服务器都必须接受来自各种 OP 的令牌。
这意味着:
- 所有 API 中的大量配置
- 每次添加或删除新领域时,都必须更新所有 API 的配置
我了解客户端 A 可以获得两个访问令牌。一个来自 OP A,一个来自 OP B。通用授权库不支持开箱即用,这会增加客户端必须处理的复杂性(管理/刷新多个令牌/将正确的令牌发送到正确的端点)。此外,我不清楚在使用来自两个 OP 的两个令牌时 OIDC 流程会是什么样子。
- 客户端会将用户重定向到 OP A 进行身份验证(因为客户端本身受 OP A 保护)。
- 在收到 ID 和 Access Token 后,允许用户使用客户端,并且客户端拥有 API A 所需的令牌。
- 客户端还将向 OP B 请求访问令牌,这意味着用户必须在 OP B 进行身份验证
- 用户要么必须在 OP B 提供用户名/密码,或者,如果我们使用身份联合,OP B 将重定向到用户已经有会话的 OP A,从而产生来自 OP B 的用于 API B 的访问令牌
- 客户端将使用令牌 B 调用 API B,使用令牌 A 调用 API A
是否有其他解决方案可以接受来自使用 OAuth/OIDC 的另一个 OP 保护的客户端的请求?很明显,这两个领域之间必须存在某种信任设置。但是如何在不影响领域 B 中的所有资源服务器的情况下实现这一点呢?
【问题讨论】:
标签: oauth oauth-2.0 openid openid-connect