【问题标题】:API Gateway custom authorizerAPI Gateway 自定义授权者
【发布时间】:2018-10-01 12:15:02
【问题描述】:

我是 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/

对于“请求类型的 Lambda 授权者”,我可以通过 aws 控制台输入 header、queryValue1、stageValue1 和 accountId 进行测试。

但是……

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

谁能帮我弄清楚?

【问题讨论】:

    标签: aws-lambda aws-api-gateway


    【解决方案1】:

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

    您的授权方无法修改原始请求详细信息(但其中包含 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 Gateway 将接收相同的请求对象(具有所有相同的参数)。

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

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

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

    【讨论】:

    • 感谢您的帮助。我没有通过“curl -d”传递QueryString1、StageVar1和accountId或者我应该在“Method Request”中设置QueryString1,在Stage中设置StageVar1,在Mapping Template中设置accountId?
    • AccountId 会自动为您设置。阶段变量由您在将 API 部署到阶段后设置(访问阶段的设置)。查询字符串和标头由 http 客户端传递(curl)
    • 感谢您的帮助
    • 别担心,我会用 cmets 的东西编辑答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-12
    • 1970-01-01
    • 2016-11-30
    • 1970-01-01
    • 2019-03-04
    • 2018-04-17
    • 2018-01-15
    相关资源
    最近更新 更多