在 HTTP API 网关中使用授权方时用另一个 JWT 令牌替换 JWT 令牌

问题描述

在我的项目中,我目前有一个以这种方式工作的旧式身份验证:

  1. 一个客户端(独立)与 API service 通信,后者是在容器中运行的自定义应用程序。
  2. 使用支持 OAuth 和 PKCE 的云身份提供商 (IdP)。当用户进入登录页面然后被重定向到回调时,它通过通常的登录过程提供其令牌。
  3. API service 充当回调的接收者。因此,它获取身份提供者 token-1 并将其存储在缓存中。基于此,它向客户端返回一个修改后的 token-2token-1 “计算”但不同的 token-2
  4. 一旦客户端需要进行 REST 调用,它就会使用 token-1 JWT 令牌对其进行修饰。调用转到 API 服务,将其与 API service 匹配,然后可以根据 IdP 进行验证。

我需要使用云原生机制摆脱 API service。我假设 AWS HTTP API 网关可以使用其 JWT Authorizer capability 直接与 IdP 集成。遗憾的是,我无法影响必须保持功能的当前遗留流程。

但是,我想在 JWT Authorizer 和客户端端点之间插入一个 Lambda,它将执行面向客户端的令牌与 IdP 令牌的交换(执行 <svg width="2000" height="2000"> <polygon points="98 160,100 200,195 200,205 155" style="stroke: green; stroke-width: 5; stroke-linejoin:round; fill:green"/> <text fill="#fcfcfc" class="text" x=135 y=183>Text</text> </svg> 正在做的事情)。这可能吗?我该如何处理?

解决方法

听起来您需要创建一个 Lambda 授权器(以前称为自定义授权器),而不是使用默认的 JWT 授权器。

https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html

您可以在其中编写自己的逻辑,包括验证令牌和执行您提到的其他步骤。