Open ID Connect Auth代码流中的客户端应用程序究竟是谁/什么



从OpenID的角度和我读过的所有问题/文章来看,这似乎很不言自明——它是请求ID令牌的客户端应用程序。然而,当我试图将它映射为我们架构中的实际"应用程序"时,我并不完全确定。

给定:

  • ID_Token的受众是Client_Application
  • Access_Token的受众面向受保护资源API
  • 我们有一个前端SPA,它有自己的后端web API(稍后可能会被其他客户端使用)

涉及的组件包括:

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

如果我想在用户访问Front-end SPA时应用Auth Code流,Front-end SPA或Web_API会被视为Client_Application吗?在Auth-Code流中,ID_Token的Auth_Code的实际交换将通过后端Web_API到OP的后通道进行。然而,最初请求用户身份验证的实际上是前端SPA。ID_Token的受众应该是什么?是SPA还是Web_API的App_ID?

感谢您的澄清。

当前的最佳实践要求SPA使用PKCE的授权代码流(最佳实践rfc草案)。因此,在SPA中使用OAuth时,请考虑这一点。

关于您的疑问,以下是您的客户和受众

  • 客户-您的SPA
  • ID代币的受众-您的SPA
  • 访问令牌的受众-后端web API

正当性:

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

关于ID代币,它将由您的SPA消费。验证SPA后,对最终用户进行身份验证。所以它的目标受众是SPA。

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

相关内容

最新更新