AWS Lambda、AWS API Gateway和保护REST端点

6
我正在考虑在AWS Lambda上实现一系列REST端点的服务,可能还会使用AWS API Gateway。前端将是JS浏览器客户端,直接调用这些端点,消除了中间层的需求。
在我的研究中,我似乎找不到如何为“已登录”的用户提供安全访问调用的方法?我发现Lambda调用是无状态的,因此没有会话数据。我不需要会话数据,只需要知道他们是否经过身份验证,并在某些情况下获得访问特定端点的授权。将有一个数据库(DynamoDB或RDS),因此如果我需要会话数据,我可以创建它。
有办法做到这一点吗?我意识到我可以通过每个API调用传递他们的用户名和密码,但似乎必须有更好的方法。
此外,这可能会在Java中实现。我能使用Spring Security吗?
2个回答

4

我认为您不希望在Lambda函数中使用Spring Security。我无法想象那样能够很好地运行,而且我怀疑它根本就不会工作。即使它可以在Lambda上运行,它肯定会增加函数的冷启动时间,这是您不想处理的。

提供用户身份验证检查到无状态服务的推荐方法是通过使用JWT(JSON Web Tokens)。Auth0提供了一篇关于JWT的很好的通用文章here,以及一个有关使用Auth0与API Gateway和Lambda的教程here。即使您不使用Auth0,我认为第二个教程也有助于理解如何在API Gateway和Lambda上执行用户身份验证。

您还可以使用API Gateway Custom Authorization功能,该功能允许您将所有身份验证代码封装在一个Lambda函数中,该函数像“门卫”一样作用于您的API端点。我建议使用自定义授权Lambda函数来验证提交到您的API的JSON Web令牌。


非常感谢,马克。这看起来很有帮助。AWS Cognito可以用于身份验证吗?我不太关心授权。 - Jim Archer
是的,Cognito可以与API Gateway IAM身份验证一起使用。 - Mark B

0
为确保您的API网关端点安全,您可以考虑使用 AWS Signature V4对请求进行签名,使用Cognito授权令牌或Lambda(自定义)授权者进行身份验证,这些都可以相对容易地设置。还有其他选择,请查看 AWS文档
您可以使用CloudFormation模板或通过AWS控制台中的任一种进行设置。在前端,您可以使用AWS Amplify库来签署请求。
请查看本文,了解如何保护对API网关的访问。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接