如何应用授权方在我的 API 网关代理集成中选择路由



我正在使用无服务器 framwework 将应用程序部署到 AWS Lambda。我的应用程序由单个 Lambda 提供服务,这就是我使用{proxy+}传递请求路径的原因:

functions:
app:
runtime: go1.x
handler: bin/lambda
events:
- http:
path: /{proxy+}
method: any

现在,我想使用自定义授权方 Lambda 来保护我的应用程序的某些部分(/admin/认为所有内容(。我想我可以添加另一个使用授权方的事件定义,如下所示:

functions:
app:
runtime: go1.x
handler: bin/lambda
events:
- http:
path: /admin/{proxy+}
method: any
authorizer:
name: authorizer
resultTtlInSeconds: 0
identitySource: method.request.header.Authorization
- http:
path: /{proxy+}
method: any

然而,这根本没有效果。如果我将授权方应用于根级代理,它将按预期应用,因此授权方本身按预期工作。

在这种情况下,如何定义我的路由?我是否需要使用不同的 Lambda,或者我缺少什么?

我能想到的有两个选项:

  1. 如果您确实希望端点以您编写的方式进行,则可以使用通用端点(根端点(,并在该处理程序中检查请求是否用于/admin然后重定向或为此执行其他特殊情况。

  2. 放弃拥有根终端节点并使用两个"普通"终端节点:

functions:
app:
runtime: go1.x
handler: bin/lambda
events:
- http:
path: /admin/{proxy+}
method: any
authorizer:
name: authorizer
resultTtlInSeconds: 0
identitySource: method.request.header.Authorization
- http:
path: /user/{proxy+}
method: any

你应该研究 https://docs.aws.amazon.com/en_pv/apigateway/latest/developerguide/api-gateway-swagger-extensions.html

基本上(对于开放 API 3.0(,您将在路由上定义一个security密钥。 此类密钥的定义在components.securitySchemas

最新更新