我在AWS API Gateway后面有一个API,需要使用Authorization标头进行处理.遗憾的是,我无法将其传递给后端进行处理.
我试图在我的方法请求创建授权HTTP请求报头,然后在我的集成请求创建相应的授权HTTP标(授权从method.request.header.Authorization映射在这种情况下).我记录了后端接收的所有头文件,并且从日志中,我可以看到我在集成请求中列出但未授权的其他头文件.
我还尝试使用Content-Type创建一个映射模板,application/json并将模板定义为
{
"AccountID": "$context.identity.accountId",
"Caller": "$context.identity.caller",
"User": "$context.identity.user",
"Authorization": "$input.params().header.get('Authorization')",
"UserARN": "$context.identity.userArn"
}
Run Code Online (Sandbox Code Playgroud)
然而,后端日志显示JSON主体中仍然没有Authorization标头或任何Authorization字段.我也看不到用户的ARN.我已经看到其他示例和线程,其中用户提到访问传递给Lambda函数的事件对象上的Authorization字段,但我没有使用Lambda函数.
我确保在两种情况下都部署API网关.
有谁知道我是否可以通过API网关将Authorization标头传递给我的HTTP端点?是否有其他方法可以访问API调用者的用户名或ID?
编辑 - 这是我用来访问API网关的代码片段:
String awsAccessKey = "myaccesskey";
String awsSecretKey = "mysecretkey";
URL endpointUrl;
try {
endpointUrl = new URL("https://<host>/<path>/<to>/<resource>?startDate=20151201&endDate=20151231");
} catch(Exception e) {
throw new RuntimeException("Unable to parse service endpoint: " + e.getMessage());
}
Date now = new Date();
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'");
sdf1.setTimeZone(new SimpleTimeZone(0, "UTC"));
String dateTS = sdf1.format(now);
String headerNames = "host;x-amz-date";
String queryParameters = …Run Code Online (Sandbox Code Playgroud)