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 自定义授权者的主要内容,如果未能解决你的问题,请参考以下文章

AWS API Gateway 自定义授权方给予例外

未调用 AWS API Gateway 自定义授权方

如何为 AWS API Gateway 自定义授权方配置 CORS?

AWS API Gateway 身份验证(Cognito 与自定义授权者)

如何从 AWS API Gateway 自定义授权方检索 Spring Boot 中的上下文对象?

如何使用无服务器部署没有身份源的 API Gateway 自定义授权方?