Who/What Open ID Connect 授权代码流中的客户端应用程序到底是什么?

Who/What exactly is the Client Application in the Open ID Connect Auth Code Flow?

从 OpenID 的角度和所有 questions/articles 我读过的内容来看,这似乎是不言自明的 - 它是请求 ID 令牌的客户端应用程序。但是,当我尝试将其映射到我们架构中的实际 "application" 时,我并不确定。

鉴于:

涉及的组件有:

  1. 前端 SPA(依赖方)
  2. 后端Web_API(受保护的资源)
  3. OpenID 提供商 (OP)

如果我想在用户访问前端 SPA 时应用授权码流程,前端 SPA 或 Web_API 是否会被视为 Client_Application?在授权代码流程中,Auth_Code 与 ID_Token 的实际交换将发生在后台通道,通过后端 Web_API 到 OP。然而,最初请求用户身份验证的实际上是前端 SPA。 ID_Token 的 should/would 观众是什么 - 是 SPA 还是 Web_API 的 App_ID?

感谢您对澄清的任何帮助。

当前的最佳实践要求 SPA 将授权代码流与 PKCE (draft best practice rfc) 结合使用。因此,在您的 SPA 中使用 OAuth 时请考虑这一点。

关于您的疑问,这是您的客户和观众

  • 客户 - 您的SPA
  • ID 令牌 的受众 - 您的 SPA
  • 访问令牌的受众 - 后端网站API

理由:

是您的 SPA 完成 OAuth 流程并获取令牌。正如我所说,它必须遵循 PKCE 作为当前推荐(有足够的库来支持这一点)。所以从授权服务器的角度来看,客户端就是你的SPA。

关于 ID Token,它旨在供您的 SPA 使用。一旦验证 SPA 验证最终用户。所以它的目标受众是 SPA。

访问令牌旨在供您的 SPA 针对您的后端使用。一旦它收到 API 请求,它必须检查访问令牌受众是否包含以自身为目标的标识符(例如:- 如果是 JWT,则声明包含后端标识符。或者如果令牌自省,则包含标识符的响应)。通常你的授权服务器允许你注册这样的受众,你的授权请求可以有预期的受众参数(例如:- Azure 使用这种方法)。但这些是实现细节。