首页 文章

AWS API网关自定义授权程序

提问于
浏览
1

我试图通过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:转换后的 endpoints 请求体:{“type”:“TOKEN”,“authorizationToken”:“ABC123”,“methodArn”:“arn:aws:execute-api:ap- southeast-1:007183653813:ohlqxu9p57 / null / GET /“}星期一4月10日09:42:36 UTC 2017:由于配置错误导致执行失败:授权程序功能因响应正文失败:{”errorMessage“:”JSON期间发生错误响应序列化“,”errorType“:”java.lang.RuntimeException“,”stackTrace“:[],”cause“:{”errorMessage“:”com.fasterxml.jackson.databind.JsonMappingException:JsonObject(通过引用链: com.google.gson.JsonObject [\“asString \”])“,”errorType“:”java.io.UncheckedIOException“,”stackTrace“:[],”cause“:{”errorMessage“:”JsonObject(通过引用) chain:com.google.gson.JsonObject [\“asString \”])“,”errorType“:”com.fasterxml.jackson.databind.JsonMappingException“,”stackTrace“:[”com.fasterxml.jackson.databind.JsonMappingException .wrapWithPath(JsonMappingException.java:210) “” com.fasterxml.jackson.databind.JsonMa ppingException.wrapWithPath(JsonMappingException.java:177) “ ”com.fasterxml.jackson.databind.ser.std.StdSerializer.wrapAndThrow(StdSerializer.java:199)“,” com.fasterxml.jackson.databind.ser.std . BeanSerializerBase.serializeFields(BeanSerializerBase.java:683)“,”com.f [TRUNCATED] Mon Apr 10 09:42:36 UTC 2017:AuthorizerConfigurationException

任何帮助都会很棒 . 提前致谢

3 回答

  • 0

    AWS开发人员指南提供了lambda函数输入/输出的良好示例:http://docs.aws.amazon.com/apigateway/latest/developerguide/use-custom-authorizer.html

  • 0

    您面临的问题是与Lambda框架相关 .

    本质上,Lambda将调用处理函数并传递序列化的JSON .

    public class LambdaCustomAuthorizer implements RequestHandler<AuthorizationRequestDO, Object> {
    
    
    public Object handleRequest(AuthorizationRequestDO input, Context context) { }
    

    }

    当您使用自定义授权程序时,API网关将以下JSON传递给您的lambda函数:

    {“type”:“TOKEN”,“authorizationToken”:“”,“methodArn”:“arn:aws:execute-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() + "]";
    }
    

    }

  • 0

    您的 Resource 属性应该是单个 string 值 .

    {
        "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"
    }
    

相关问题