首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AWS API网关自定义授权器

AWS API网关自定义授权器
EN

Stack Overflow用户
提问于 2017-04-10 10:13:07
回答 2查看 1.9K关注 0票数 1

我试图通过java实现自定义授权程序lambda函数。有人能告诉我我的lambda函数所期望的JSON响应的确切格式吗?另外,我应该以哪种格式返回输出(JSON对象或策略对象)。

代码语言:javascript
复制
{
    "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 10 09:42:35 UTC 2017 :端点请求体转换后:{“type”:"authorizationToken":"ABC123",authorizationToken Mon Apr 10 09:42:36 UTC 2017 :因配置错误执行失败:授权程序功能与响应体一起失败:{“errorMessage”:“在JSON序列化响应期间发生错误”,"errorType":"java.lang.RuntimeException",“"cause":{"errorMessage":"com.fasterxml.jackson.databind.JsonMappingException:”:[],"errorType":"com.fasterxml.jackson.databind.JsonMappingException",JsonObject (通过引用链:com.google.gson.JsonObject\“asString\”)、"errorType":"java.io.UncheckedIOException“、"stackTrace":[]、”原因“:{”errorMessage“:”JsonObject(通过引用链: com.google.gson.JsonObject\"asString\")“"stackTrace":["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)","com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:683)","com.f截断周一04月10日09:42:36 UTC 2017 : AuthorizerConfigurationException

任何帮助都会很好。提前感谢

EN

回答 2

Stack Overflow用户

发布于 2017-05-16 06:20:20

您所面临的问题是Lambda框架相关的。

实际上,Lambda将调用处理程序函数并传递一个序列化的JSON。

代码语言:javascript
复制
public class LambdaCustomAuthorizer implements RequestHandler<AuthorizationRequestDO, Object> {


public Object handleRequest(AuthorizationRequestDO input, Context context) { }

}

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

{“类型”:“令牌”,“authorizationToken”:“methodArn”:“arn:aws:execute::/”}

您应该有一个定制的DO AuthorizationRequestDO

它是POJO::

公共类AuthorizationRequestDO {

代码语言:javascript
复制
 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
EN

Stack Overflow用户

发布于 2017-05-21 11:29:41

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

代码语言:javascript
复制
{
    "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"
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43320481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档