AWS AppSync Lambda解析器$ context.identity为null

问题描述

我正在尝试通过AWS AppSync调用的lambda函数获取用户的ip地址。

我尝试使用此输入解析器:

{ 
    "version" : "2017-02-28","operation": "Invoke","payload": { 
         "arguments": $util.toJson($context.arguments),"sourceIp" : $context.identity.sourceIp 
    } 
}

但是我在通过AppSync查询仪表板调用函数时发现$context.identity为空。

还有其他方法可以获取用户的IP地址吗?还是我做错了什么?

谢谢。

更新: 在aldarisbm的帮助下,我想到了这个输入解析器:

#set ($forwardHeader = "${context.request.headers.X-Forwarded-For}")
#set ($comma = $forwardHeader.indexOf(','))
#set ($ip = $forwardHeader.substring(0,$comma))
#set ($payload = $context.arguments)
#set ($discard = $payload.put("sourceIp","${ip}"))

{ "version" : "2017-02-28","payload": $util.toJson($payload) } 

解决方法

我没有专门使用$context.identity,但是您是否尝试检查过AWS添加到您的请求中的标头:

https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/x-forwarded-headers.html

有一个X-Forwarded-For: client-ip-address头被添加到请求中。

这应该可以解决您的问题。