我将调用路由到通过API网关托管在AWS上的后端API。客户端请求包括一个JWT令牌,该令牌由Lambda授权者验证,该Lambda授权者生成IAM策略,然后在到达API端点之前由API网关缓存。
我想添加另一个lambda函数来对请求进行一些验证,该验证与lambda授权者完成的jwt令牌验证是分开的。仅当验证成功时,客户端请求才会传递到后端。这样的情况可能吗?
谢谢!
答案 0 :(得分:1)
API网关中是否可以有授权者Lambda和代理Lambda?
是的,可以使API网关将授权者Lambda连接到代理Lambda,但是,听起来您还希望将代理Lambda连接到单独的Lambda。 (也许您正在寻找“请求过滤器”,例如the Spring model。)API Gateway和Lambda不像人们希望的那样支持这种结构。
如果要实现关注点的服务级别分离,则可能需要研究Lambda to Lambda invocation。在您建议的模型中,这看起来类似于...
Gateway Authorizer λ -> Gateway Proxy λ (perform routing) -> "backend" λ
这为您带来的好处是能够在代理级别具有自定义路由和验证逻辑。但是,我应该发出以下警告提示:
您可能会对AWS Lambda感兴趣的一项功能是Lambda Layers。与服务级别的分离相比,这更多的是代码级的分离,这在您的情况下可能足够,也可能不够。
在实践中,我们的团队仅使用API网关授权器来解决AuthN(听起来好像您在做)。然后,我们让每个Lambda处理其特定的输入验证(查询参数,请求正文等),并通过查询自定义服务来处理AuthZ。
希望这会有所帮助。祝你好运:)。
答案 1 :(得分:0)
您可以在API网关上实现Request Validation,但主要用于检查HTTP调用是否“有效”;表示标头存在且不为空白,JSON有效负载遵循模型。