我正在尝试通过java SDK实现自定义授权器lambda函数。有人可以告诉我lambda函数预期的JSON响应的确切格式。另外,我应该以哪种格式返回输出(JSON对象或策略对象)。
{
"policyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Action": "execute-api:Invoke",
"Resource": [
"arn:aws:execute-api:us-east-1:1234567:myapiId/staging/POST/*"
],
"Effect": "Allow"
}
]
},
"principalId": "User123"
}
这是我在JSONObject
格式的输出中提供的格式,但是收到错误
Mon Apr 10 09:42:35 UTC 2017:终点请求正文 变换: {"类型":" TOKEN"" authorizationToken":" ABC123"" methodArn":" ARN:AWS:执行-API:AP-东南-1:007183653813:ohlqxu9p57 /空/ GET /"} 2017年4月10日星期一09:42:36由于配置,执行失败 错误:授权程序功能因响应正文失败: {" errorMessage":" JSON序列化期间发生错误 响应"" ERRORTYPE":"了java.lang.RuntimeException""堆栈跟踪":[],"原因":{& #34;的errorMessage":" com.fasterxml.jackson.databind.JsonMappingException: JsonObject(通过参考链: com.google.gson.JsonObject [\" asString \"])"" ERRORTYPE":" java.io.UncheckedIOException"&# 34;栈跟踪":[],"原因" {"的errorMessage":"的JSONObject (通过参考链: com.google.gson.JsonObject [\" asString \"])"" ERRORTYPE":" com.fasterxml.jackson.databind.JsonMappingException&#34 ;,"堆栈跟踪":[" com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:210)"" com.fasterxml.jackson.databind .JsonMappingException.wrapWithPath(JsonMappingException.java:177)"" com.fasterxml.jackson.databind.ser.std.StdSerializer.wrapAndThrow(StdSerializer.java:199)"&#34 ; com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:683)"" com.f [截止日期] 2017年4月10日星期一09:42:36 AuthorizerConfigurationException
任何帮助都会很棒。提前致谢
答案 0 :(得分:0)
AWS开发人员指南提供了lambda函数输入/输出的良好示例:http://docs.aws.amazon.com/apigateway/latest/developerguide/use-custom-authorizer.html
答案 1 :(得分:0)
您面临的问题是Lambda框架相关。
本质上,Lambda将调用处理函数并传递序列化的JSON。
public class LambdaCustomAuthorizer implements RequestHandler<AuthorizationRequestDO, Object> {
public Object handleRequest(AuthorizationRequestDO input, Context context) { }
}
当您使用自定义授权程序时,API网关将遵循JSON传递给您的lambda函数:
{ “类型”:“令牌”, “authorizationToken”: “”, “methodArn”: “阿尔恩:AWS:执行-API ::: ///” }
你应该有一个自定义DO AuthorizationRequestDO
这是一个POJO ::
public class AuthorizationRequestDO {
String authorizationToken;
String methodArn;
public String getAuthorizationToken() {
return authorizationToken;
}
public void setAuthorizationToken(String authorizationToken) {
this.authorizationToken = authorizationToken;
}
public String getMethodArn() {
return methodArn;
}
public void setMethodArn(String methodArn) {
this.methodArn = methodArn;
}
@Override
public String toString() {
return "AuthorizationRequestDO [authorizationToken=" + authorizationToken + ", methodArn=" + methodArn
+ ", getAuthorizationToken()=" + getAuthorizationToken() + ", getMethodArn()=" + getMethodArn() + "]";
}
}
答案 2 :(得分:0)
您的Resource
媒体资源应为string
个{/ p}。
{
"policyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Action": "execute-api:Invoke",
"Resource": "arn:aws:execute-api:us-east-1:1234567:myapiId/staging/POST/*",
"Effect": "Allow"
}
]
},
"principalId": "User123"
}