但我的问题有点不同:
我有一个使用自定义授权器并具有多个阶段的API网关,大多数具有方法(GET / POST)的资源都与普通的HTTP端点集成,这意味着它们只是对所讨论的端点“直通” (不使用HTTP代理集成)。
这些端点都指向stageVariables。
但是,出于特殊原因,我需要在调用它之前更新此stageVariable。我的想法是设置并从自定义身份验证的$context.authorizer.variableName
获取$context
。
我的问题是,如果我没有使用Lambda,我将如何更新此值。
您似乎可以某种方式使用Body Mapping模板(请参阅this link和this link),但我不确定如何使用它们来更新stageVariable?
有什么想法吗?
答案 0 :(得分:1)
您可以在上下文中设置值,但不能更改阶段变量
var generatePolicy = function(principalId, effect, resource) {
var authResponse = {};
//...
// Can optionally return a context object of your choosing.
authResponse.context = {};
authResponse.context.stringKey = "stringval";
authResponse.context.numberKey = 123;
authResponse.context.booleanKey = true;
return authResponse;
}
上下文将在
中提供$ context.authorizer.stringKey ...
可以添加到集成请求映射模板以传递到后端。
答案 1 :(得分:1)
如果其他人遇到过这个问题。
在AWS团队提供3天帮助之后,这里似乎有2个问题;
1 - 确认目前无法更改stageVariables(<)。
2 - 正文中的$context
和$authorizer
变量存在限制。作为旁注:AWS团队已经创建了一个新的服务请求并为此工作。
解释:
目前,在node.js中,您可以访问传递给Lambda函数的整个数据有效负载(在event
参数内),其中包括所有自定义变量。这与C#
等效项不同 - 它在Lambda函数中使用APIGatewayProxyRequest请求对象。因此,尽管您可以在C#中访问节点内的整个有效负载(包括所有自定义变量),但您只能访问APIGatewayProxyRequest对象。可以找到here的属性:
或简而言之:
public string Body { get; set; }
public IDictionary<string, string> Headers { get; set; }
public string HttpMethod { get; set; }
public bool IsBase64Encoded { get; set; }
public string Path { get; set; }
public IDictionary<string, string> PathParameters { get; set; }
public IDictionary<string, string> QueryStringParameters { get; set; }
public ProxyRequestContext RequestContext { get; set; }
public string Resource { get; set; }
public IDictionary<string, string> StageVariables { get; set; }
因此,不允许访问自定义或&#34;未知&#34; (多个)对象。
长话短说,截至目前:您无法通过代码编辑stageVariables
,如果您希望在发送的有效负载中使用任何类型的自定义变量,您可能需要通过节点对其进行编码(event
)/ python,或者可能覆盖APIGatewayProxyRequest对象中的现有属性。
更新(处理#2):
有一种方法可以访问所有数据的有效负载:
到目前为止,解决方法是让您的Lambda函数接受System.IO.Stream而不是APIGatewayProxyRequest。然后您可以访问您可以自己解析的原始JSON。您可以从该JSON中获取所需的信息,然后将JSON反序列化为APIGatewayProxyRequest。