无服务器框架忽略 lambda 代理设置中的 "authorizer" 块
Serverless Framework ignoring "authorizer" block in lambda-proxy setup
我们有一个 serverless.yml
在 API 网关中创建一个 lambda 代理。
我见过几种将 Cognito 用户池授权方附加到 lambda 代理的方法,但其中 none 有效。在每种情况下,结果都是没有在 Proxy 或 Proxy+ 上设置任何身份验证。 (例如,在 API 网关控制台中,"Auth" 始终读取 "NONE"。)
示例:
events:
- http: ANY /
integration: lambda-proxy
authorizer:
type: COGNITO_USER_POOLS
authorizerId:
Ref: CognitoUserPoolAuthorizer
- http: ANY {proxy+}
integration: lambda-proxy
authorizer:
arn: ${self:custom.userPools.arnBase}/${self:custom.userPools.ids.${self:custom.stage}}
# The above results in the format: "arn:aws:cognito-idp:us-west-2:<account_id>:userpool/us-west-2_<user_pool_id>"
你可以在上面看到我正在尝试两种不同的方法来完成相同的任务。 (让我们试着把科学扔到墙上,看看有什么坚持。)
这两种方法都记录在不同的地方 by the serverless framework,但都没有关于 lambda 代理的记录,所以我不确定是否存在未记录的差异。
在第一种方法中(在资源上使用 Ref
),资源已正确创建,但端点未附加任何身份验证。 (我没有在这里包括资源块,因为它按预期工作。)第二种方法具有相同的效果(但没有创建授权方)。
我们的serverless framework版本是1.52,符合.
的要求
我也尝试过将 integration
设置为 lambda
,或者完全不使用该行。结果在所有情况下都是相同的。
我已经通过控制台手动选择授权方来实现这一点,但我们正试图消除这些手动步骤。
我们在这里缺少什么?
乍一看,您的 serverless.yml
文件的缩进似乎有问题。您可以使用 http
数组项下方的选项卡重试吗?
此外,您需要删除方法和路径的 shorthand,而是单独使用它们。下面的代码片段应该有效:
events:
- http:
method: ANY
path: /
integration: lambda-proxy
authorizer:
type: COGNITO_USER_POOLS
authorizerId:
Ref: CognitoUserPoolAuthorizer
- http:
method: ANY
path: /{proxy+}
integration: lambda-proxy
authorizer:
arn: ${self:custom.userPools.arnBase}/${self:custom.userPools.ids.${self:custom.stage}}
我们有一个 serverless.yml
在 API 网关中创建一个 lambda 代理。
我见过几种将 Cognito 用户池授权方附加到 lambda 代理的方法,但其中 none 有效。在每种情况下,结果都是没有在 Proxy 或 Proxy+ 上设置任何身份验证。 (例如,在 API 网关控制台中,"Auth" 始终读取 "NONE"。)
示例:
events:
- http: ANY /
integration: lambda-proxy
authorizer:
type: COGNITO_USER_POOLS
authorizerId:
Ref: CognitoUserPoolAuthorizer
- http: ANY {proxy+}
integration: lambda-proxy
authorizer:
arn: ${self:custom.userPools.arnBase}/${self:custom.userPools.ids.${self:custom.stage}}
# The above results in the format: "arn:aws:cognito-idp:us-west-2:<account_id>:userpool/us-west-2_<user_pool_id>"
你可以在上面看到我正在尝试两种不同的方法来完成相同的任务。 (让我们试着把科学扔到墙上,看看有什么坚持。) 这两种方法都记录在不同的地方 by the serverless framework,但都没有关于 lambda 代理的记录,所以我不确定是否存在未记录的差异。
在第一种方法中(在资源上使用 Ref
),资源已正确创建,但端点未附加任何身份验证。 (我没有在这里包括资源块,因为它按预期工作。)第二种方法具有相同的效果(但没有创建授权方)。
我们的serverless framework版本是1.52,符合
我也尝试过将 integration
设置为 lambda
,或者完全不使用该行。结果在所有情况下都是相同的。
我已经通过控制台手动选择授权方来实现这一点,但我们正试图消除这些手动步骤。
我们在这里缺少什么?
乍一看,您的 serverless.yml
文件的缩进似乎有问题。您可以使用 http
数组项下方的选项卡重试吗?
此外,您需要删除方法和路径的 shorthand,而是单独使用它们。下面的代码片段应该有效:
events:
- http:
method: ANY
path: /
integration: lambda-proxy
authorizer:
type: COGNITO_USER_POOLS
authorizerId:
Ref: CognitoUserPoolAuthorizer
- http:
method: ANY
path: /{proxy+}
integration: lambda-proxy
authorizer:
arn: ${self:custom.userPools.arnBase}/${self:custom.userPools.ids.${self:custom.stage}}