我是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/
对于“REQUEST类型的Lambda Authorizer”,我可以通过aws控制台输入header,queryValue1,stageValue1和accountId进行测试。
但是...
我对“请求类型”感到困惑,并且不知道如何将queryValue1,stageValue1和accountId传递给API网关。
任何人都可以帮我弄清楚吗?
答案 0 :(得分: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名称>阶段>舞台名称>舞台变量)HeaderAuth
和QueryString1
由HTTP客户端发送(例如curl
)