我仍在努力理解AWS Lambda的限制,特别是现在AWS API Gateway通过Lambda为REST请求提供了许多选项。
我正在考虑使用Angular构建Web应用程序,并将Lambda作为后端服务。
对于简单的CRUD操作,似乎很简单,但是身份验证怎么办?我能否在Lambda中使用像Passport这样的东西进行用户身份验证?
我仍在努力理解AWS Lambda的限制,特别是现在AWS API Gateway通过Lambda为REST请求提供了许多选项。
我正在考虑使用Angular构建Web应用程序,并将Lambda作为后端服务。
对于简单的CRUD操作,似乎很简单,但是身份验证怎么办?我能否在Lambda中使用像Passport这样的东西进行用户身份验证?
是的,您可以做任何事情,只需将会话存储在 AWS 托管的数据库上(RDS、Dynamo 等)。但请注意,您使用 Lambda 时需要了解其具体的权衡取舍。
价格:EC2 服务器每月需要固定费用,但 Lambda 每次调用都有成本。哪个更便宜取决于您的使用模式。当没有人使用您的产品时,Lambda 更便宜;使用量增加时,EC2 很可能 更便宜。
规模:EC2 可以扩展(以多种方式),但它更“手动”和“粗糙”(您只能运行 1 个或 2 个服务器,而不能运行 1.5 个)。Lambda 具有细粒度的扩展性。您不必担心这个问题,但您也对此控制较少。
性能:Lambda 具有一定的速度,并且您几乎没有控制权。在某些情况下,它可能具有巨大的延迟,因为它们会启动新容器来处理流量。EC2 为性能调整提供了更多选项。(盒子大小、盒子缓存、使用最新版本的 node.js、从盒子中删除不需要的服务、能够运行 strace 等)您可以支付超额容量以确保低延迟。
代码:在 Lambda vs EC2 中,您编写代码的方式略有不同。Lambda 强制你遵守一些惯例,这主要是最佳实践。但是,在性能或开发速度方面,EC2 允许您违反这些惯例。当您需要解决问题时,Lambda 是一个“黑盒子”,您对其控制和可见性较少。
设置:Lambda 更易于设置,并且总体上需要更少的知识。EC2 要求您成为系统管理员,并了解像 VPC、EBS、VPN、AMI 等首字母缩写。
我在这里发布这个帖子,因为这是我在搜索在Lambda上运行NodeJS Passport身份验证时找到的第一个主题。
由于您可以在Lambda上运行Express应用程序,因此您确实可以直接在Lambda上运行Passport。但是,Passport实际上是专门为Express设计的中间件,如果您首先为Lamda设计,则可能不希望使用Express(因为API网关基本上完成了所有这些工作)。
正如@Jason所提到的,您可以利用自定义授权者。这似乎非常简单明了,但谁想构建所有可能的身份验证方法呢?这就是Passport的优点之一,人们已经为您完成了这项工作。
如果您正在使用Servlerless Framework,有人已经构建了"Serverless-authentication"项目。这包括许多标准授权提供者的模块:Facebook,Google,Microsoft。还有一个用于构建更多授权提供者的样板文件。但是身份验证呢?
最模块化的方法是使用 API Gateway 的 自定义授权者(自 2016 年 2 月以来推出),提供实现身份验证和授权的 AWS Lambda 函数。
我编写了一个通用的自定义授权者,可与第三方单点登录服务 Auth0 一起使用。
请参阅此问题:如何进行 AWS REST API 身份验证。
我能否在 Lambda 中使用 Passport 进行用户身份验证?
不容易。Passport 依赖于回调 URL,您需要创建和配置。