首页 文章

API网关自定义授权程序

提问于
浏览
0

我是API网关的新手 . 我尝试使用"custom authorizer" . 我按照下面的文档并使用了网站提供的示例代码 . 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 回答

  • 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

相关问题