创建 Lambda 函数后,您可以将 Lambda 函数配置为您的 API 的授权方。然后,您可以将方法配置为调用 Lambda 授权方,以确定调用方是否可以调用该方法。您可以在创建 API 的相同账户或不同账户中创建 Lambda 函数。
您可以使用 API Gateway 控制台中的内置工具或使用 Postman 来测试 Lambda 授权方。有关如何使用 Postman 测试 Lambda 授权方函数的说明,请参阅使用 API Gateway Lambda 授权方调用 API。
以下过程介绍如何在 API Gateway REST API 控制台中创建 Lambda 授权方。要详细了解不同类型的 Lambda 授权方,请参阅选择 Lambda 授权方类型。
- REQUEST authorizer
-
配置 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
。
-
选择创建授权方。
- TOKEN authorizer
配置 TOKEN
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 事件负载,选择令牌。
-
对于令牌来源,输入包含授权令牌的标头名称。客户端必须包括此标头名称才能将授权令牌发送到 Lambda 授权方。
-
(可选)对于令牌验证,请输入正则表达式语句。API Gateway 将针对此表达式执行对输入令牌的初始验证并在成功验证后调用授权方。
-
要缓存授权方生成的授权策略,请将授权缓存保持开启状态。在启用策略缓存后,令牌来源中指定的标头名称将成为缓存键。在启用策略缓存后,您可以修改 TTL 值。将 TTL 设置为零将禁用策略缓存。
如果启用缓存,授权方必须返回适用于 API 中所有方法的策略。要强制执行特定于方法的策略,您可以关闭授权缓存。
-
选择创建授权方。
创建 Lambda 授权方后,您可以对其进行测试。以下过程介绍如何测试 Lambda 授权方。
- REQUEST authorizer
-
- TOKEN authorizer
-
以下 create-authorizer 命令演示了如何使用 AWS CLI 创建 Lambda 授权方。
- REQUEST 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
- TOKEN authorizer
-
以下示例创建 TOKEN
授权方并使用 Authorization
标头作为身份来源:
aws apigateway create-authorizer \
--rest-api-id 1234123412 \
--name 'First_Token_Custom_Authorizer' \
--type TOKEN \
--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' \
--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 授权方后,必须将其附加到 API 方法。
配置 API 方法以使用 Lambda 授权方
-
通过以下网址登录到 Amazon API Gateway 控制台:https://console.aws.amazon.com/apigateway。
-
选择 API。
-
选择资源,然后选择一种新方法或选择现有方法。
-
在方法请求选项卡上的方法请求设置下,选择编辑。
-
对于授权方,从下拉菜单中选择您刚刚创建的 Lambda 授权方。
-
(可选)如果您希望将授权令牌传递到后端,请选择 HTTP 请求标头。选择添加标头,然后添加授权标头的名称。在名称中,输入标头名称,该名称必须与您在为 API 创建 Lambda 授权方时指定的令牌来源名称相匹配。此步骤不适用于 REQUEST
授权方。
-
选择保存。
-
选择部署 API,将 API 部署到某个阶段。对于使用阶段变量的 REQUEST
授权方,您还必须在阶段页面中定义必需的阶段变量并指定其值。
配置 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"