我正在考虑在AWS Lambda和可能的AWS API Gateway上将服务实现为一系列REST端点。前端是一个JS浏览器客户端,可直接调用这些端点,无需中间层。
在我的研究中,我似乎无法找到的是,如何保护对“已登录”的人的通话的访问可以这么说?我看到Lambda调用是无状态的,所以没有会话数据。我不需要会话数据,除了知道它们已经过身份验证,并且在相同的情况下被授权访问特定端点。将有一个数据库(DynamoDB或RDS),所以如果我需要会话数据,我可以创建它。
有办法做到这一点吗?我意识到我可以通过每个API调用传递他们的用户名和密码,但似乎必须有更好的方法。
此外,这可能会在Java中实现。我可以使用Spring Security吗?
答案 0 :(得分:3)
我不认为你想在Lambda函数中使用Spring Security。我无法想象工作得很好,我怀疑它会起作用。即使它可以在Lambda上运行,它肯定会增加你的功能的冷启动时间,而不是你想要处理的。
为无状态服务提供用户身份验证检查的推荐方法是使用JWT(JSON Web令牌)。 Auth0提供了一篇关于JWT here的好文章,以及关于将Auth0与API网关和Lambda here一起使用的教程。即使您没有使用Auth0,我认为第二个教程对于了解如何在API Gateway和Lambda上执行用户身份验证非常有用。
您还可以使用API Gateway Custom Authorization函数,这些函数允许您将所有身份验证代码封装在一个Lambda函数中,该函数类似于" gatekeeper"到您的API端点。我建议使用自定义授权Lambda函数来验证提交给API的JSON Web令牌。
答案 1 :(得分:0)
要保护API网关端点安全,可以考虑使用AWS Signature V4对请求进行签名,方法是使用相对容易设置的Cognito授权令牌或Lambda(自定义)授权器。还有其他选择。检出AWS document。
您可以使用CloudFormation模板或通过AWS控制台设置其中之一。在前端,您可以使用AWS Amplify库对请求进行签名。
查看this article,了解如何保护对API网关的访问。