如何在我的 API 网关代理集成中将授权方应用到 select 路由
How can I apply an Authorizer to select routes in my API Gateway Proxy integration
我正在使用无服务器框架将应用程序部署到 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 还是缺少某些东西?
基本上(对于 open api 3.0)你会在你的路线上定义一个 security
键。此类键的定义在 components.securitySchemas
内
我能想到的有两个方案:
如果您真的想要按照您编写的方式使用端点,您可以使用通用端点(根端点)并在该处理程序内部检查请求是否针对 /admin
然后重定向或为此做一些其他特殊情况。
放弃拥有根端点并使用两个 "normal" 端点:
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
我正在使用无服务器框架将应用程序部署到 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 还是缺少某些东西?
基本上(对于 open api 3.0)你会在你的路线上定义一个 security
键。此类键的定义在 components.securitySchemas
我能想到的有两个方案:
如果您真的想要按照您编写的方式使用端点,您可以使用通用端点(根端点)并在该处理程序内部检查请求是否针对
/admin
然后重定向或为此做一些其他特殊情况。放弃拥有根端点并使用两个 "normal" 端点:
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