从 API 网关执行的 Step Function 获取授权方上下文
Getting authorizer context from Step Function executed from API Gateway
我正在尝试让我的 API 网关 api 到:
- 运行 授权人
- 将授权方上下文传递给 Step Function 执行
- 使用 Step Function 输出响应客户端
我已经完成了#1 和#3,但事实证明无法将附加的授权方 lambda 的响应传递给 step 函数。
我找到 this page and this page 参考表,了解您可以将哪些插值值用于参数映射(创建集成 -> 步进函数:StartSyncExecution -> 高级设置 -> 输入),但任何时候我尝试使用与 $context
相关的任何内容,例如 $context.authorizer.email
、API 网关仅响应 HTTP 400 并向我提供此 CloudWatch 输出:
"Unable to resolve property Input from source {\"lambdaName\": \"arn:aws:lambda:us-east-1:xxxxxxx\", \"reqBody\": $request.body.Input, \"authContext\": $context.apiId }. Please make sure that the request to API Gateway contains all the necessary fields specified in request parameters."
这些是我尝试用于输入文本框的 JSON 对象,所有这些对象要么在尝试保存时给我一个错误,要么在我访问时抛出 HTTP 400 并记录上述错误路线:
{"lambdaName": "xxx", "reqBody": $request.body.Input, "authContext": $context.authorizer.email }
{"lambdaName": "xxx", "reqBody": $request.body.Input, "authContext": "$context.authorizer.email" }
{"lambdaName": "xxx", "reqBody": $request.body.Input, "authContext": $context.apiId }
{"lambdaName": "xxx", "reqBody": $request.body.Input, "authContext": $context }
{"lambdaName": "xxx", "reqBody": $request.body.Input, "authContext": $event.requestContext.authorizer.email }
似乎让授权代码与步骤功能一起使用的唯一方法是将 API 网关调用的步骤功能包装在 另一个 授权步骤功能中请求,然后调用端点步骤函数。我已经研究了几个小时,但我一无所获。感谢任何帮助。
我最终通过使用 API Gateway v1 和 REST API 而不是 HTTP API 解决了这个问题。由于某些原因,v2 的输入字段目前对 $request.body.Input 以外的任何内容都不起作用。从那里,我将所有端点连接到一个步骤函数,该函数在请求中的授权 header 上运行授权 lambda。
我有一个步骤函数,它允许我将步骤函数和 lambda 操作链接在一起,因此对于大多数请求,我只是将授权方 lambda 和端点的操作(可以是 lambda 或另一个步骤函数)链接在一起。
这里的主要内容是,如果您正在使用 API 网关和 Step Functions,那么如果不使用API REST API 网关的 v1,而不是 HTTP api。希望这会在未来得到解决。
我正在尝试让我的 API 网关 api 到:
- 运行 授权人
- 将授权方上下文传递给 Step Function 执行
- 使用 Step Function 输出响应客户端
我已经完成了#1 和#3,但事实证明无法将附加的授权方 lambda 的响应传递给 step 函数。
我找到 this page and this page 参考表,了解您可以将哪些插值值用于参数映射(创建集成 -> 步进函数:StartSyncExecution -> 高级设置 -> 输入),但任何时候我尝试使用与 $context
相关的任何内容,例如 $context.authorizer.email
、API 网关仅响应 HTTP 400 并向我提供此 CloudWatch 输出:
"Unable to resolve property Input from source {\"lambdaName\": \"arn:aws:lambda:us-east-1:xxxxxxx\", \"reqBody\": $request.body.Input, \"authContext\": $context.apiId }. Please make sure that the request to API Gateway contains all the necessary fields specified in request parameters."
这些是我尝试用于输入文本框的 JSON 对象,所有这些对象要么在尝试保存时给我一个错误,要么在我访问时抛出 HTTP 400 并记录上述错误路线:
{"lambdaName": "xxx", "reqBody": $request.body.Input, "authContext": $context.authorizer.email }
{"lambdaName": "xxx", "reqBody": $request.body.Input, "authContext": "$context.authorizer.email" }
{"lambdaName": "xxx", "reqBody": $request.body.Input, "authContext": $context.apiId }
{"lambdaName": "xxx", "reqBody": $request.body.Input, "authContext": $context }
{"lambdaName": "xxx", "reqBody": $request.body.Input, "authContext": $event.requestContext.authorizer.email }
似乎让授权代码与步骤功能一起使用的唯一方法是将 API 网关调用的步骤功能包装在 另一个 授权步骤功能中请求,然后调用端点步骤函数。我已经研究了几个小时,但我一无所获。感谢任何帮助。
我最终通过使用 API Gateway v1 和 REST API 而不是 HTTP API 解决了这个问题。由于某些原因,v2 的输入字段目前对 $request.body.Input 以外的任何内容都不起作用。从那里,我将所有端点连接到一个步骤函数,该函数在请求中的授权 header 上运行授权 lambda。
我有一个步骤函数,它允许我将步骤函数和 lambda 操作链接在一起,因此对于大多数请求,我只是将授权方 lambda 和端点的操作(可以是 lambda 或另一个步骤函数)链接在一起。
这里的主要内容是,如果您正在使用 API 网关和 Step Functions,那么如果不使用API REST API 网关的 v1,而不是 HTTP api。希望这会在未来得到解决。