是否有一种标准的,受支持的方式,使用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,"但这似乎是网关架构内部的一些荒谬的重塑。
答案 0 :(得分:1)
解决方案在文档中,它只需要一点推断。
下面的"Map Method Request Data 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
,与文档中的示例保持一致:
记住"测试"功能在资源"方法执行"接口不是这种配置的有效测试,因为不从测试接口执行方法请求授权程序。测试日志显示授权程序上下文变量不可用:
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网关,拖延我的访问日志并发出实时请求(满足授权者。)