问题描述
在我的项目中,我目前有一个以这种方式工作的旧式身份验证:
- 有一个客户端(独立)与
API service
通信,后者是在容器中运行的自定义应用程序。 - 使用支持 OAuth 和 PKCE 的云身份提供商 (IdP)。当用户进入登录页面然后被重定向到回调时,它通过通常的登录过程提供其令牌。
-
API service
充当回调的接收者。因此,它获取身份提供者token-1
并将其存储在缓存中。基于此,它向客户端返回一个修改后的token-2
从token-1
“计算”但不同的token-2
。 - 一旦客户端需要进行 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
您可以在其中编写自己的逻辑,包括验证令牌和执行您提到的其他步骤。