API Gateway 自定义授权者

Posted

技术标签:

【中文标题】API Gateway 自定义授权者【英文标题】:API Gateway custom authorizer 【发布时间】: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。

谁能帮我弄清楚?

【问题讨论】:

【参考方案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 的东西编辑答案

以上是关于API Gateway 自定义授权者的主要内容,如果未能解决你的问题,请参考以下文章