创建 Lambda 函数后,您可以将 Lambda 函数配置为您的 API 的授权方。然后,您可以将方法配置为调用 Lambda 授权方,以确定调用方是否可以调用该方法。您可以在创建 API 的相同账户或不同账户中创建 Lambda 函数。
您可以使用 API Gateway 控制台中的内置工具或使用 Postman
配置 Lambda 授权方(控制台)
以下过程介绍如何在 API Gateway REST API 控制台中创建 Lambda 授权方。要详细了解不同类型的 Lambda 授权方,请参阅选择 Lambda 授权方类型。
配置 REQUEST
Lambda 授权方
-
通过以下网址登录到 API Gateway 控制台:https://console.aws.amazon.com/apigateway
。 -
选择一个 API,然后选择授权方。
-
选择创建授权方。
-
对于授权方名称,输入授权方名称。
-
对于授权方类型,选择 Lambda。
-
对于 Lambda 函数,选择您在其中创建 Lambda 授权方函数的 AWS 区域,然后输入函数名称。
-
将 Lambda 调用角色留空,以允许 API Gateway REST API 控制台设置基于资源的策略。此策略授予 API Gateway 调用 Lambda 授权方函数的权限。您还可以选择输入 IAM 角色的名称,以允许 API Gateway 调用 Lambda 授权方函数。有关角色示例,请参阅创建一个可代入的 IAM 角色。
-
对于 Lambda 事件负载,选择请求。
-
在身份来源类型中,选择一个参数类型。支持的参数类型为
Header
、Query string
、Stage variable
和Context
。要添加更多身份来源,请选择添加参数。 -
要缓存授权方生成的授权策略,请将授权缓存保持开启状态。在启用策略缓存后,您可以修改 TTL 值。将 TTL 设置为零将禁用策略缓存。
如果启用缓存,授权方必须返回适用于 API 中所有方法的策略。要强制执行特定于方法的策略,请使用上下文变量
$context.path
和$context.httpMethod
。 -
选择创建授权方。
创建 Lambda 授权方后,您可以对其进行测试。以下过程介绍如何测试 Lambda 授权方。
测试 REQUEST
Lambda 授权方
-
通过以下网址登录到 Amazon API Gateway 控制台:https://console.aws.amazon.com/apigateway
。 -
选择授权方的名称。
-
在测试授权方下,输入身份来源的值。
如果您使用的是 REQUEST 授权方 Lambda 函数示例,请执行以下操作:
-
选择标头并输入
headerValue1
,然后选择添加参数。 -
在身份来源类型下,选择查询字符串并输入
queryValue1
,然后选择添加参数。 -
在身份来源类型下,选择阶段变量并输入
stageValue1
。
您无法修改测试调用的上下文变量,但可以修改 Lambda 函数的 API Gateway 授权方测试事件模板。然后,您可以使用修改后的上下文变量来测试 Lambda 授权方函数。有关更多信息,请参阅《AWS Lambda 开发人员指南》中的在控制台中测试 Lambda 函数。
-
-
选择测试授权方。
配置 Lambda 授权方(AWS CLI)
以下 create-authorizer 命令演示了如何使用 AWS CLI 创建 Lambda 授权方。
以下 create-authorizer 命令创建 REQUEST
授权方,并使用 Authorizer
标头和 accountId
上下文变量作为身份来源:
aws apigateway create-authorizer \ --rest-api-id 1234123412 \ --name 'First_Request_Custom_Authorizer' \ --type REQUEST \ --authorizer-uri 'arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:123412341234:function:customAuthFunction/invocations' \ --identity-source 'method.request.header.Authorization,context.accountId' \ --authorizer-result-ttl-in-seconds 300
创建 Lambda 授权方后,您可以对其进行测试。以下 test-invoke-authorizer 命令测试 Lambda 授权方:
aws apigateway test-invoke-authorizer --rest-api-id 1234123412 \ --authorizer-id efg1234 \ --headers Authorization='Value'
配置方法以使用 Lambda 授权方(控制台)
配置 Lambda 授权方后,必须将其附加到 API 方法。
配置 API 方法以使用 Lambda 授权方
-
通过以下网址登录到 Amazon API Gateway 控制台:https://console.aws.amazon.com/apigateway
。 -
选择 API。
-
选择资源,然后选择一种新方法或选择现有方法。
-
在方法请求选项卡上的方法请求设置下,选择编辑。
-
对于授权方,从下拉菜单中选择您刚刚创建的 Lambda 授权方。
-
(可选)如果您希望将授权令牌传递到后端,请选择 HTTP 请求标头。选择添加标头,然后添加授权标头的名称。在名称中,输入标头名称,该名称必须与您在为 API 创建 Lambda 授权方时指定的令牌来源名称相匹配。此步骤不适用于
REQUEST
授权方。 -
选择保存。
-
选择部署 API,将 API 部署到某个阶段。对于使用阶段变量的
REQUEST
授权方,您还必须在阶段页面中定义必需的阶段变量并指定其值。
配置方法以使用 Lambda 授权方(AWS CLI)
配置 Lambda 授权方后,必须将其附加到 API 方法。您可以创建新方法或使用补丁操作将授权方附加到现有方法。
以下 put-method 命令创建使用 Lambda 授权方的新方法:
aws apigateway put-method --rest-api-id 1234123412 \ --resource-id a1b2c3 \ --http-method PUT \ --authorization-type CUSTOM \ --authorizer-id efg1234
以下 update-method 命令更新现有方法以使用 Lambda 授权方:
aws apigateway update-method \ --rest-api-id 1234123412 \ --resource-id a1b2c3 \ --http-method PUT \ --patch-operations op="replace",path="/authorizationType",value="CUSTOM" op="replace",path="/authorizerId",value="efg1234"