API网关自定义授权程序

时间:2018-04-20 18:01:44

标签: aws-lambda aws-api-gateway

我是API网关的新手。我尝试使用“自定义授权器”。我按照下面的文档并使用了网站提供的示例代码。 https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html

“TOKEN类型的Lambda授权人”正在工作。

curl -v -H 'x-custom-auth: xxxxx" https://xxxxx.execute-api.us-west-1.amazonaws.com/Prod/

对于“REQUEST类型的Lambda Authorizer”,我可以通过aws控制台输入header,queryValue1,stageValue1和accountId进行测试。

但是...

我对“请求类型”感到困惑,并且不知道如何将queryValue1,stageValue1和accountId传递给API网关。

任何人都可以帮我弄清楚吗?

1 个答案:

答案 0 :(得分:1)

无论您使用哪种类型的授权方,API网关都会收到您最初发送的相同标头和参数。

您的授权人无法修改原始请求详细信息(但它包含API网关也可以读取的身份验证context)。

在您引用的示例中:

if (headers.HeaderAuth1 === "headerValue1"
    && queryStringParameters.QueryString1 === "queryValue1"
    && stageVariables.StageVar1 === "stageValue1"
    && requestContext.accountId === "123456789012") {
    callback(null, generateAllow('me', event.methodArn));
}  else {
    callback("Unauthorized");
}

他们所说的是REQUEST授权人期望请求对象中的特定值:

  • 如果所有值都匹配,授权人将Allow请求继续。 API网关将接收相同的请求对象(具有所有相同的参数)。

  • 如果并非所有值都匹配,授权人将Deny请求返回403 Unauthorized; API网关不会收到请求。

示例中的每个属性都来自以下方式:

  • AccountId由AWS自动设置
  • StageVar1来自已部署的API的舞台设置(API名称>阶段>舞台名称>舞台变量)
  • HeaderAuthQueryString1由HTTP客户端发送(例如curl