我正在使用无服务器 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,或者我缺少什么?
我能想到的有两个选项:
-
如果您确实希望端点以您编写的方式进行,则可以使用通用端点(根端点(,并在该处理程序中检查请求是否用于
/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: /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