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 名称 > 阶段 > 阶段名称 > 阶段变量)
HeaderAuth
和 QueryString1
由 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 自定义授权方配置 CORS?
AWS API Gateway 身份验证(Cognito 与自定义授权者)