使用Lambda Authorizer结果转换上游请求查询参数

时间:2018-02-05 13:40:27

标签: aws-lambda aws-api-gateway

是否有一种标准的,受支持的方式,使用Lambda授权商确定的值转换发送到网关上游的请求网址?

在我的AWS API网关中,我的资源使用Lambda"授权程序"。授权者在向上游传递请求之前解密请求所携带的身份验证令牌,并进行部分授权。

我的目标是将解密的身份验证令牌附加到上游请求,最好是作为请求参数,但如果必须,请求头也可以。我认为应该有一种方法可以在我的资源"方法请求"的授权程序步骤中实现这一点,或者以某种方式在" Integration Request"资源的一步。

例如,Using API Gateway Custom Authorizers文档演示了如何将自定义参数附加到授权策略:

// Optional output with custom properties of the String, Number or Boolean type.
authResponse.context = {
    "stringKey": "stringval",
    "numberKey": 123,
    "booleanKey": true
};
return authResponse;

这个似乎就像在Authorizer Lambda(网关资源的方法请求)和网关资源的URL转换功能之间进行通信的完美界面#39; s 集成请求,但是我还没有找到从"集成请求参数" 中访问授权程序上下文数据的文档化方法。

Mapping templates似乎解决了转换请求有效负载的问题。如何访问动态请求参数的自定义身份验证响应上下文?

似乎可以在"集成请求"中使用Lambda代理集成。位置,它将协调自己转变的" passthrough,"但这似乎是网关架构内部的一些荒谬的重塑。

1 个答案:

答案 0 :(得分:1)

解决方案在文档中,它只需要一点推断。

下面的"Map Method Request Data to Integration Request Parameters"表表明,上下文值可用于集成请求参数:

The table at "Map Method Request Data to Integration Request Parameters" which suggests that context values are available to Integration Request Parameters

虽然linked context variable reference非常特定于请求映射,但在$context.authorizer.property下:

  

上下文的指定键值对的字符串化值   从API网关自定义授权程序Lambda函数返回的映射。   例如,如果授权者返回以下上下文映射:

     

"context" : { "key": "value", "numKey": 1, "boolKey": true }

     

调用$context.authorizer.key会返回"值"字符串,调用   $context.authorizer.numKey返回" 1"字符串和调用   $context.authorizer.boolKey返回" true"字符串。

只需在授权者响应上下文的自定义值中添加密钥的名称,例如context.authorizer.booleanKey,与文档中的示例保持一致:

Screen shot, how to add context authorizer values as URL Query String parameters in resource Integration Request

记住"测试"功能在资源"方法执行"接口不是这种配置的有效测试,因为不从测试接口执行方法请求授权程序。测试日志显示授权程序上下文变量不可用:

Mon Feb 05 14:54:37 UTC 2018 : Endpoint request URI: http://v.x.y.z/ping?standard_context_var_ex=vxyz&test=1

为了测试,我必须部署API网关,拖延我的访问日志并发出实时请求(满足授权者。)