Amazon API Gateway
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

为 Amazon API Gateway Lambda 授权方提供的输入

对于 TOKEN 类型的 Lambda 授权方(以前称为自定义授权方),您必须在为 API 配置授权方时指定自定义标头作为 Token Source (令牌来源)。API 客户端必须在传入请求中传递该标头中必需的授权令牌。在收到传入方法请求后,API Gateway 将从自定义标头中提取此令牌。随后,它会将此令牌作为 Lambda 函数的 event 对象的 authorizationToken 属性传递,并将方法 ARN 作为 methodArn 属性传递:

{ "type":"TOKEN", "authorizationToken":"{caller-supplied-token}",     "methodArn":"arn:aws:execute-api:{regionId}:{accountId}:{appId}/{stage}/{httpVerb}/[{resource}/[{child-resources}]]" }

在此示例中,type 属性指定授权方类型,后者是 TOKEN 授权方。{caller-supplied-token} 源自客户端请求中的授权标头。methodArn 是传入方法请求的 ARN,由 API Gateway 根据 Lambda 授权方配置填充。

对于上一部分中显示的示例 TOKEN 授权方 Lambda 函数,{caller-supplied-token} 字符串为 allowdenyunauthorized 或任何其他字符串值。空白字符串值与 unauthorized 相同。下面显示了一个此类输入的示例,即在任意阶段 (*) 中,在 AWS 账户 (123456789012) API (ymy8tbxw7b) 的 GET 方法上获取 Allow 策略。

{ "type":"TOKEN", "authorizationToken":"allow", "methodArn":"arn:aws:execute-api:us-west-2:123456789012:ymy8tbxw7b/*/GET/" }

对于 REQUEST 类型的 Lambda 授权方,API Gateway 将所需的请求参数作为 event 对象的一部分传递到授权方 Lambda 函数。受影响的请求参数包括标头、路径参数、查询字符串参数、阶段变量以及一些请求上下文变量。API 调用方可以设置路径参数、标头和查询字符串参数。API 开发人员必须在 API 部署期间设置阶段变量,并且 API Gateway 将在运行时提供请求上下文。

注意

路径参数可作为请求参数传递到 Lambda 授权方函数,但它们不能作身份来源。

以下示例显示针对带代理集成的 API 方法 (REQUEST) 的 GET /request 授权方的输入:

{ "type": "REQUEST", "methodArn": "arn:aws:execute-api:us-east-1:123456789012:s4x3opwd6i/test/GET/request", "resource": "/request", "path": "/request", "httpMethod": "GET", "headers": { "X-AMZ-Date": "20170718T062915Z", "Accept": "*/*", "HeaderAuth1": "headerValue1", "CloudFront-Viewer-Country": "US", "CloudFront-Forwarded-Proto": "https", "CloudFront-Is-Tablet-Viewer": "false", "CloudFront-Is-Mobile-Viewer": "false", "User-Agent": "...", "X-Forwarded-Proto": "https", "CloudFront-Is-SmartTV-Viewer": "false", "Host": "....execute-api.us-east-1.amazonaws.com", "Accept-Encoding": "gzip, deflate", "X-Forwarded-Port": "443", "X-Amzn-Trace-Id": "...", "Via": "...cloudfront.net (CloudFront)", "X-Amz-Cf-Id": "...", "X-Forwarded-For": "..., ...", "Postman-Token": "...", "cache-control": "no-cache", "CloudFront-Is-Desktop-Viewer": "true", "Content-Type": "application/x-www-form-urlencoded" }, "queryStringParameters": { "QueryString1": "queryValue1" }, "pathParameters": {}, "stageVariables": { "StageVar1": "stageValue1" }, "requestContext": { "path": "/request", "accountId": "123456789012", "resourceId": "05c7jb", "stage": "test", "requestId": "...", "identity": { "apiKey": "...", "sourceIp": "..." }, "resourcePath": "/request", "httpMethod": "GET", "apiId": "s4x3opwd6i" } }

requestContext 是键值对的映射,与 $context 变量相对应。其结果与 API 相关。API Gateway 可能会向映射添加新键。有关 Lambda 代理集成中的 Lambda 函数的更多信息,请参阅用于代理集成的 Lambda 函数的输入格式